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';

Ответ 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

Это не так тривиально. Лучший способ сделать это - записать неправильные запросы в ваше приложение. Нет встроенного способа.