Включение логирования запросов к MySQL

Если требуется протрейсить запросы к СУБД MySQL (для оптимизации веб-приложений или поиска ошибок), можно включить логирование SQL-запросов в файлы-журналы.

Логи запросов к СУБД MySQL имеют свойство быстро разрастаться, т.к. каждый запрос полностью записывается в файл. Тем самым, на дисковую подсистему ложится большая нагрузка и, в целом, производительность системы и СУБД снижается. Таким образом, включённое логирование запросов - нештатный режим работы СУБД для диагностики, после которой нужно обязательно отключать журналирование.

Создадим директорию, куда будем писать логи MySQL, назначим директории права владельца и группы, от которых работает СУБД (файлы создавать необязательно, они будут созданы автоматически при рестарте демона MySQL).

# mkdir /var/log/mysql
# chown mysql:mysql /var/log/mysql/

Внесём соответствующие директивы в конфигурационный файл my.cnf.

# vi /var/db/mysql/my.cnf
[mysqld]

log=/var/log/mysql/mysql.log                 # Лог всех SQL-запросов
log-bin=/var/log/mysql/mysql.err             # Бинарный лог всех SQL-запросов
log-error=/var/log/mysql/mysql.login         # Лог ошибок в работе демона СУБД MySQL
log-slow-queries=/var/log/mysql/mysql.slow   # Лог всех медленных SQL-запросов
long_query_time=2                            # Кол-во секунд, после которых выполнение запроса считается медленным

Перезагрузим mysqld, чтобы он запустился с новыми директивами логирования.

# /usr/local/etc/rc.d/mysqld restart

Готово. Не забываем после диагностики отключить журналирование.

UPDATE

На MySQL версии 5.6.22 встретилась ошибка:

[ERROR] /usr/local/libexec/mysqld: unknown variable 'log-slow-queries=/var/log/mysql/mysql.slow'

Указываем другие имена директив конфига:

slow-query-log=1
long_query_time=2
slow-query-log-file=/var/log/mysql/mysql.slow