Журнал MySQL недействительных запросов - PullRequest
18 голосов
/ 08 января 2011

Я не управляю командами из 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, чтобы я мог попытаться их разрешить.

Ответы [ 5 ]

15 голосов
/ 08 января 2011

Журнал ошибок не делает этого: https://dev.mysql.com/doc/refman/8.0/en/error-log.html

Журнал ошибок содержит информацию, указывающую, когда mysqld был запущен и остановлен, а также любые критические ошибки, возникающие во время работы сервера.

MySQL нигде не регистрирует недействительные / неудачные запросы.


Если это для целей отладки, вы можете попробовать настроить MySQL Proxy, который мог бы регистрировать это, я думаю:1011 *

http://dev.mysql.com/downloads/mysql-proxy/

9 голосов
/ 30 ноября 2015

В принципе, есть 2 способа.

1) настроить какой-либо прокси, который может регистрировать запросы об ошибках.Есть много вилок оригинального прокси-сервера mysql (о котором упоминал @Mchl) - https://github.com/search?utf8=%E2%9C%93&q=MySQL+Proxy Также вы можете найти последнюю версию оригинального прокси-сервера mysql здесь 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 голосов
/ 23 февраля 2016

Начиная с версии 5.6.3 mysql (выпущенной 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
3 голосов
/ 08 января 2011

Не могли бы вы включить Общий журнал запросов ?Это должно рассказать вам все, что вам нужно знать.

0 голосов
/ 08 января 2011

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

...