MySQL: включаем slow_query_log без перезагрузки сервера

Автор: | 04/05/2013
 

mysqllogoВ дополнение к статье MySQL: включаем лог медленных запросов — другой вариант, который не требует перезагрузки сервера.

Подключаемся к MySQL и устанавливаем less для удобного просмотра страниц:

mysql> pager less;
PAGER set to 'less'

Выводим информацию о текущих установках глобальных переменных:

mysql> show variables where variable_name like "slow_query_log%";
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_query_log      | OFF                           |
| slow_query_log_file | /var/log/mysql/mysql_slow.log |
+---------------------+-------------------------------+
2 rows in set (0.00 sec)

Включаем ведение лога:

mysql> set global log_slow_queries='ON';
Query OK, 0 rows affected, 1 warning (0.02 sec)

Устанавливаем время, после которого запрос будет считаться «slow«:

mysql> set global long_query_time = 2;
Query OK, 0 rows affected (0.01 sec)

И для текущей сессии:

mysql> set @@SESSION.long_query_time = 2;
Query OK, 0 rows affected (0.01 sec)

Ещё раз проверим настройки:

mysql> show variables where variable_name like "slow_query_log%";
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| slow_query_log      | ON                              |
| slow_query_log_file | /var/log/mysql/mysql_slow.log   |
+---------------------+---------------------------------+
mysql> show variables where variable_name="long_query_time";
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.000000 |
+-----------------+----------+
1 row in set (0.02 sec)

Выполним:

mysql> do sleep (10);
Query OK, 0 rows affected (10.04 sec)

И посмотрим на сам лог:

# tail -f /var/log/mysql/mysql_slow.log
/usr/sbin/mysqld, Version: 5.5.30-1~dotdeb.0 ((Debian)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
# Time: 130405 16:30:41
# User@Host: debian-sys-maint[debian-sys-maint] @ localhost []
# Query_time: 10.036070  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0
use db1_test;
SET timestamp=1365168641;
do sleep (10);