Полный цикл в digital

Логирование запросов

Логирование запросов помогает найти узкие места в работе СУБД MySQL и повысить ее производительность. Рассмотрены варианты включения как с перезагрузкой сервера, так и БЕЗ перезагрузки.

Логирование медленных запросов

Включение лога длительных запросов без перезагрузки MySQL-сервера производится из терминала mysql:

mysql>SET global slow_launch_time = 1;
SET global slow_query_log_file = '/tmp/mysql_time.log';
SET global slow_query_log = 1;
FLUSH LOGS;

Установленные параметры означают следующее:

  • slow_query_log = 1 включает или выключает лог медленных запросов (1-включить; 0-выключить)
  • slow_launch_time = 1 задает время (здесь, 1 секунда), при превышении которого запрос будет считаться медленным
  • slow_query_log_file = ... путь до файла, в который будут записываться все медленные запросы
  • FLUSH LOGS - очищает log-файл

Путь до файла логов должен указывать на директорию, в которую пользователь mysql имеет права на запись. В противном случае, при выполнении команды SET global general_log_file='...' будет появляться ошибка: Variable 'general_log_file' can't be set to the value of .... По умолчанию эти директории имеют имена: /var/log/mysql/ и /var/lib/mysql/. Имя файла может быть любым.

Просмотр медленных запросов в реальном времени можно осуществлять командой:

tail -f /var/log/mysql/query_slow.log

Через какое-то время, при накоплении запросов можно проанализировать файл при помощи утилиты mysqldumpslow. Она покажет какой запрос сколько раз встречается в log-файле:

mysqldumpslow /var/log/mysql/query_slow.log

Логирование можно отключить в любое время с помощью:

mysql>SET global slow_query_log = 0;

После перезагрузки MySQL-сервера установленный параметры примут значение по умолчанию и логирование прекратиться. Что бы включить постоянное логирование запросов, то необходимо добавить вышеуказанные параметры в файл конфигурации MySQL-сервера, в секцию [mysqld]:

my.cnf[mysqld]
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /tmp/mysql_time.log

Логирование всех запросов

В таблицу

Самым простым способом логирования всех запросов поступающих к БД MySQL это включения логирования в отдельную таблицу базы данных.

Проверим, существует ли таблица логов general_log:

mysql>USE mysql;
SHOW TABLES LIKE 'general_log';

Если не существует то создадим ее:

mysql>CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';

Включаем ведение журнала запросов в базе данных без перезагрузки MySQL-сервера:

mysql>SET global log_output = 'table';
SET global general_log = 1;

Логирование можно отключить в любое время командой:

mysql>SET global general_log = 0;

Просмотр журнала логов:

mysql>SELECT event_time, command_type, argument  FROM mysql.general_log;

После перезагрузки MySQL-сервера установленный параметры примут значение по умолчанию и логирование прекратиться. Что бы включить постоянное логирование запросов, то необходимо добавить вышеуказанные параметры в файл конфигурации MySQL-сервера, в секцию mysqld:

my.cnf[mysqld]
general_log = on
global log_output = 'TABLE'

В файл

Для включения логирования запросов в файл без перезапуска базы данных, необходимо выполнить следующие команды в mysql-консоли:

mysql>SET global log_output = 'FILE';
SET global general_log_file='/tmp/mysql_access.log';
SET global general_log = 1;

Файл логов должен указывать на директорию, в которую учетная запись (от которой работает MySQL-сервер) имеет права на запись. В противном случае, при выполнении команды SET global general_log_file='...' будет появляться ошибка: Variable 'general_log_file' can't be set to the value of .... По умолчанию эти директории имеют имена: /var/log/mysql/ и '/var/lib/mysql/'. Имя файла может быть любым.

В принципе, для хранения логов запросов можно указать любую директорию, но при этом необходимо дать соответствующие разрешения командой chmod.

Просмотр всех запросов, поступающих к БД в реальном времени можно осуществлять командой:

tail -f /tmp/mysql_access.log

Логирование можно отключить в любое время с помощью:

mysql>SET global general_log = 0;

Что бы включить логирование запросов на постоянной основе, необходимо добавить вышеуказанные параметры в файл конфигурации MySQL-сервера, в секцию [mysqld]:

my.cnf[mysqld]
general_log = on
log_output = 'FILE'
general_log_file = /tmp/mysql_access.log

Логирование Error Log

Если необходимо понять, по какой причине не запускается MySql сервер error log вам в помощь.

Посмотреть расположение файла по умолчанию куда пишется error log, можно выполнив команду:

mysql>SHOW GLOBAL VARIABLES;

Бинарное логирование

В этот лог записываются все команды изменения БД, нужен он для репликации и восстановления. Включать его не рекомендуется, если никакой репликации не планируется, так как он требователен к ресурсам.

Посмотреть расположение файла по умолчанию куда пишется бинарный log, можно выполнив команду:

mysql>SHOW GLOBAL VARIABLES;
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг