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.