7.4.1 Выбор мест хранения логов запросов и медленных запросов
MySQL Server предоставляет гибкий контроль над местом вывода записей, генерируемых общим журналом запросов и журналом медленных запросов, если эти журналы включены. Возможными местами хранения записей журнала являются файлы или таблицы 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.