Отладка и логирование MySQL запросов
Настройка логирования и отладка MySQL запросов.
Логирование MySQL запросов настраивается в 2 этапа:
- Включаем само логирование;
- Указываем куда логировать запросы.
Почему удобно включать логирование с помощью MySQL команд:
- Не нужно дергать файл конфига MySQL /etc/mysql/my.cnf;
- После рестарта сервера - лог выключается.
Посмотреть включено ли логирование:
SELECT @@GLOBAL.general_log
SHOW GLOBAL VARIABLES LIKE '%log%';
SHOW GLOBAL VARIABLES WHERE Variable_name in ('version', 'log', 'general_log', 'general_log_file', 'log_output');
Включить/выключить логирование (1 - включить, 0 - выключить):
SET GLOBAL general_log = 1;
Логировать запросы в таблицу mysql.general_log:
SET GLOBAL general_log = 1;
SET GLOBAL log_output = 'TABLE';
Посмотреть логи запросов в таблице:
SELECT * FROM mysql.general_log;
Логировать запросы в файл /var/log/mysql.log (этот тип логирования включён по умолчанию):
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file = '/var/log/mysql.log';
Примечание
Файл не нужно создавать предварительно, но нужно дать права на запись в этот каталог!
По умолчанию лог-файл запросов: /var/lib/mysql/%USERNAME%log.
Включаем логирование SQL запросов в файл:
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file='dev-sql.log';
Внимание!
Глобальная системная переменная general_log_file содержит имя файла, а не полный путь к нему. Этот файл будет создан в каталоге /var/lib/mysql/ и по умолчанию именуется как <hostname>.log.
Примечание
Для просмотра значения глобальной системной переменной general_log_file - выполните запрос:
SHOW VARIABLES LIKE 'general_log_file';
Можно включить логирование и в таблицу, и в файл:
SET GLOBAL log_output = 'TABLE,FILE';
Для отключения лога:
SET GLOBAL log_output = 'NONE';
Пример включения логирования из PHP-скрипта и просмотр логов:
mysql_query("SET GLOBAL log_output = 'FILE'");
mysql_query("SET GLOBAL general_log_file = '/home/stas/tmp/mysql.project.log'");
mysql_query("SET GLOBAL general_log = 1");
// здесь выполняем SQL запрос
mysql_query("SET GLOBAL general_log = 0");
mysql_query("SET GLOBAL log_output = 'TABLE'");
Включить постоянное логирование (требует рестарт сервера):
[mysqld]
log = /var/log/mysql/mysql.log
Подробнее о других системных переменных логирования: http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_log_output
#mysql query log