MySQL Log недопустимых запросов
Я НЕ РАБОТАЮ КОМАНДЫ ОТ PHP!
У меня значение MySQL log_error установлено в /var/log/mysql/error.log
Однако, когда я подключаюсь к базе данных и запускаю команду SQL, ошибка не появляется в журнале.
SELECT *
FROM some_table
where this_is_invalid_and_will_fail="Doesn't matter because column doesn't exist!";
Есть команды, запускаемые из какого-то приложения Windows. Все, что я хочу знать, это то, что неверные команды отправляют на сервер MySQL, чтобы я мог их разрешить.
Ответы
Ответ 1
Журнал ошибок не делает этого: https://dev.mysql.com/doc/refman/8.0/en/error-log.html
Журнал ошибок содержит информацию, указывающую, когда mysqld был запущен и остановлен, а также любые критические ошибки, возникающие во время работы сервера.
MySQL нигде не регистрирует недействительные/неудачные запросы.
Если это для целей отладки, вы можете попробовать настроить MySQL Proxy, который мог бы записать это, я думаю:
http://dev.mysql.com/downloads/mysql-proxy/
Ответ 2
В принципе, есть 2 способа.
1) настройте какой-то прокси-сервер, который может регистрировать запросы ошибок. Существует много вилок исходного mysql-прокси (который упоминался @Mchl) - https://github.com/search?utf8=%E2%9C%93&q=MySQL+Proxy Также вы можете найти последнюю версию оригинальный mysql proxy здесь https://github.com/mysql/mysql-proxy
Мне не нравится этот способ, потому что его слишком сложно для быстрой отладки
2) вы можете включить общий журнал в mysql (который будет регистрировать ВСЕ запросы).
Это создаст большие накладные расходы и не будет соответствовать требованиям производства, но его быстрый и простой способ исправить ошибки в среде разработки.
Просто войдите в свой mysql и выполните
SET GLOBAL general_log = 'ON';
SHOW GLOBAL VARIABLES LIKE 'general_log%';
Вы увидите местоположение журналов, например
+------------------+------------------------+
| Variable_name | Value |
+------------------+------------------------+
| general_log | OFF |
| general_log_file | /mnt/ssd/mysql/s.log |
+------------------+------------------------+
После этого выполните
mysqladmin flush-logs -u root -p
Когда вам нужно остановить журналы - просто выполните
SET GLOBAL general_log = 'OFF';
Ответ 3
Не удалось включить Общий журнал запросов? Это должно рассказать вам все, что вам нужно знать.
Ответ 4
Как и в mysql версии 5.6.3 (выпущена 2011-10-03), существует переменная с именем log-raw
, которая позволяет включать недопустимые запросы в общий журнал запросов:
https://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_log-raw
Вам нужно будет включить общий журнал запросов, используя general-log
и general-log-file
, например:
[mysqld]
general-log=1
log-raw=1
general-log-file=/var/log/mysql/general.log
Ответ 5
Это не так тривиально. Лучший способ сделать это - записать неправильные запросы в ваше приложение. Нет встроенного способа.