Spec-Zone.ru › MySQL 9.2

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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/log-destinations.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API