5.4.1 Выбор мест хранения журнала запросов и журнала медленных запросов
Сервер MySQL предоставляет гибкий контроль над местом хранения данных, записываемых в общий журнал запросов и журнал медленных запросов, если эти журналы включены. Возможные места хранения записей журнала — это файлы журналов или таблицы general_log и slow_log в базе данных системы mysql. Можно выбрать вывод в файлы, в таблицы или в оба места.
Управление журналом при запуске сервера
Система переменная log_output определяет место хранения вывода журнала. Установка этой переменной сама по себе не включает журналы; они должны быть включены отдельно.
Если
log_outputне указана при запуске, по умолчанию место хранения журнала —FILE.Если
log_outputуказана при запуске, её значение представляет собой список одного или нескольких слов, разделённых запятыми, выбранных изTABLE(запись в таблицы),FILE(запись в файлы) илиNONE(не записывать в таблицы или файлы).NONE, если присутствует, имеет приоритет перед другими спецификаторами.
Переменная системы general_log управляет записью в общий журнал запросов для выбранных мест хранения журнала. Если задана при запуске сервера, general_log принимает необязательный аргумент 1 или 0 для включения или отключения журнала. Чтобы указать имя файла, отличное от значения по умолчанию для файлового логирования, установите переменную general_log_file. Аналогично, переменная slow_query_log управляет записью в журнал медленных запросов для выбранных мест хранения, а установка slow_query_log_file определяет имя файла для файлового логирования. Если любой из журналов включен, сервер открывает соответствующий файл журнала и записывает в него сообщения о запуске. Однако дальнейшая запись запросов в файл не происходит, если не выбрано место хранения FILE.
Примеры:
Чтобы записывать записи общего журнала запросов в таблицу журнала и в файл журнала, используйте
--log_output=TABLE,FILEдля выбора обоих мест хранения журнала и--general_logдля включения общего журнала запросов.Чтобы записывать записи общего и журнала медленных запросов только в таблицы журнала, используйте
--log_output=TABLEдля выбора таблиц как места хранения журнала и--general_logи--slow_query_logдля включения обоих журналов.Чтобы записывать записи журнала медленных запросов только в файл журнала, используйте
--log_output=FILEдля выбора файлов как места хранения журнала и--slow_query_logдля включения журнала медленных запросов. В этом случае, поскольку по умолчанию место хранения журнала —FILE, можно опустить установкуlog_output.
Управление журналом во время работы
Системные переменные, связанные с таблицами и файлами журналов, обеспечивают управление журналом во время работы:
Переменная
log_outputуказывает текущее место хранения журнала. Её можно изменить во время работы, чтобы изменить место хранения.Переменные
general_logиslow_query_logуказывают, включен (ON) или отключен (OFF) общий журнал запросов и журнал медленных запросов. Вы можете установить эти переменные во время работы, чтобы контролировать включение журналов.Переменные
general_log_fileиslow_query_log_fileуказывают имена файлов общего журнала запросов и журнала медленных запросов. Вы можете установить эти переменные при запуске сервера или во время работы, чтобы изменить имена файлов журнала.Чтобы отключить или включить общий журнал запросов для текущей сессии, установите переменную сессии
sql_log_offв значениеONилиOFF. (Это предполагает, что сам общий журнал запросов включён.)
Преимущества и характеристики таблиц логов
Использование таблиц для вывода логов обеспечивает следующие преимущества:
-
Записи лога имеют стандартный формат. Для отображения текущей структуры таблиц логов используйте следующие операторы:
SHOW CREATE TABLE mysql.general_log; SHOW CREATE TABLE mysql.slow_log;
Содержание логов доступно через операторы SQL. Это позволяет использовать запросы, выбирающие только те записи логов, которые удовлетворяют определённым критериям. Например, для выбора записей логов, связанных с конкретным клиентом (что может быть полезно для выявления проблемных запросов этого клиента), проще использовать таблицу логов, чем файл логов.
Логи доступны удалённо через любой клиент, который может подключиться к серверу и выполнить запросы (если у клиента есть соответствующие привилегии на таблицы логов). Не нужно подключаться к хосту сервера и напрямую обращаться к файловой системе.
Реализация таблиц логов имеет следующие характеристики:
В целом, основная цель таблиц логов — предоставить пользователям интерфейс для наблюдения за выполнением сервера во время работы, а не для вмешательства в его выполнение.
CREATE TABLE,ALTER TABLEиDROP TABLEявляются допустимыми операциями для таблицы логов. ДляALTER TABLEиDROP TABLE, таблица логов не может использоваться и должна быть отключена, как описано далее.-
По умолчанию таблицы логов используют движок хранения
CSV, который записывает данные в формате CSV (значения, разделённые запятыми). Для пользователей, имеющих доступ к файлам.CSV, содержащим данные таблиц логов, файлы легко импортируются в другие программы, такие как электронные таблицы, которые могут обрабатывать входные данные в формате CSV.Таблицы логов могут быть изменены для использования движка хранения
MyISAM. Вы не можете использоватьALTER TABLEдля изменения таблицы логов, которая используется. Сначала необходимо отключить лог. Движки, отличные отCSVилиMyISAM, не допускаются для таблиц логов.Таблицы логов и ошибки «слишком много открытых файлов». Если вы выбираете
TABLEв качестве назначения логов, и таблицы логов используют движок храненияCSV, вы можете обнаружить, что повторное отключение и включение общего журнала запросов или журнала медленных запросов во время работы приводит к большому количеству открытых дескрипторов файла для файла.CSV, что может привести к ошибке «слишком много открытых файлов». Чтобы обойти эту проблему, выполнитеFLUSH TABLESили убедитесь, что значениеopen_files_limitбольше, чем значениеtable_open_cache_instances. -
Для отключения ведения журнала, чтобы вы могли изменить (или удалить) таблицу логов, можно использовать следующую стратегию. В примере используется общий журнал запросов; процедура для журнала медленных запросов аналогична, но использует таблицу
slow_logи переменную системыslow_query_log.SET @old_log_state = @@GLOBAL.general_log; SET GLOBAL general_log = 'OFF'; ALTER TABLE mysql.general_log ENGINE = MyISAM; SET GLOBAL general_log = @old_log_state;
TRUNCATE TABLE— допустимая операция для таблицы логов. Она может использоваться для удаления записей логов.-
RENAME TABLE— допустимая операция для таблицы логов. Вы можете атомарно переименовать таблицу логов (например, для выполнения ротации логов) с помощью следующей стратегии:USE mysql; DROP TABLE IF EXISTS general_log2; CREATE TABLE general_log2 LIKE general_log; RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
CHECK TABLE— допустимая операция для таблицы логов.LOCK TABLESне может использоваться для таблицы логов.INSERT,DELETEиUPDATEне могут использоваться для таблицы логов. Эти операции разрешены только внутри самого сервера.FLUSH TABLES WITH READ LOCKи состояние переменной системыread_onlyне влияют на таблицы логов. Сервер всегда может записывать в таблицы логов.Записи, записанные в таблицы логов, не записываются в бинарный журнал и, следовательно, не реплицируются на реплики.
Для сброса таблиц логов или файлов логов используйте соответственно
FLUSH TABLESилиFLUSH LOGS.Разбиение таблиц логов запрещено.
Сводка mysqldump включает операторы для восстановления этих таблиц, чтобы они не отсутствовали после перезагрузки файла сводки. Содержимое таблиц логов не экспортируется.
© 2025 Oracle
Licensed under the GPLv2 License.