Spec-Zone.ru › MySQL 9.2

29.12.22.2 Таблица error_log

Из журналов, которые поддерживает сервер MySQL, один — это журнал ошибок, в который записываются диагностические сообщения (см. раздел 7.4.2, «Журнал ошибок»). Как правило, сервер записывает диагностические сведения в файл на хосте сервера или в службу системного журнала. В зависимости от конфигурации журнала ошибок сервер также может записывать самые последние события ошибок в таблицу Performance Schema error_log. Предоставление привилегии SELECT для таблицы error_log предоставляет клиентам и приложениям доступ к содержимому журнала ошибок с помощью запросов SQL, позволяя администраторам баз данных предоставлять доступ к журналу без необходимости разрешения прямого доступа к файловой системе на хосте сервера.

Таблица error_log поддерживает целевые запросы, основанные на более структурированных столбцах. Она также включает полный текст сообщений об ошибках для поддержки более свободной формы анализа.

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

Пример содержимого таблицы error_log:

mysql> SELECT * FROM performance_schema.error_log\G
*************************** 1. row ***************************
    LOGGED: 2020-08-06 09:25:00.338624
 THREAD_ID: 0
      PRIO: System
ERROR_CODE: MY-010116
 SUBSYSTEM: Server
      DATA: mysqld (mysqld 9.2.0) starting as process 96344
*************************** 2. row ***************************
    LOGGED: 2020-08-06 09:25:00.363521
 THREAD_ID: 1
      PRIO: System
ERROR_CODE: MY-013576
 SUBSYSTEM: InnoDB
      DATA: InnoDB initialization has started.
...
*************************** 65. row ***************************
    LOGGED: 2020-08-06 09:25:02.936146
 THREAD_ID: 0
      PRIO: Warning
ERROR_CODE: MY-010068
 SUBSYSTEM: Server
      DATA: CA certificate /var/mysql/sslinfo/cacert.pem is self signed.
...
*************************** 89. row ***************************
    LOGGED: 2020-08-06 09:25:03.112801
 THREAD_ID: 0
      PRIO: System
ERROR_CODE: MY-013292
 SUBSYSTEM: Server
      DATA: Admin interface ready for connections, address: '127.0.0.1' port: 33062

Таблица error_log имеет следующие столбцы. Как указано в описаниях, все, кроме столбца DATA, соответствуют полям структуры базового события ошибки, которая описана в разделе 7.4.2.3, «Поля событий ошибок».

  • LOGGED

    Маркер времени события с точностью до микросекунд. LOGGED соответствует полю time событий ошибок, хотя с некоторыми потенциальными различиями:

    • Значения в журнале ошибок отображаются в соответствии с настройкой системной переменной log_timestamps; см. Формат вывода журналов на ранней стадии запуска.

    • Столбец LOGGED хранит значения с использованием типа данных TIMESTAMP, для которых значения хранятся в UTC, но отображаются при извлечении в часовом поясе текущей сессии; см. раздел 13.2.2, «Типы DATE, DATETIME и TIMESTAMP».

    Для отображения значений LOGGED в том же часовом поясе, что и в файле журнала ошибок, сначала установите часовой пояс сессии следующим образом:

    SET @@session.time_zone = @@global.log_timestamps;
    

    Если значение log_timestamps равно UTC, а ваша система не имеет поддержки именованных часовых поясов (см. раздел 7.1.15, «Поддержка часовых поясов сервера MySQL»), установите часовой пояс следующим образом:

    SET @@session.time_zone = '+00:00';
    
  • THREAD_ID

    Идентификатор потока MySQL. THREAD_ID соответствует полю thread событий ошибок.

    Внутри Performance Schema столбец THREAD_ID в таблице error_log наиболее похож на столбец PROCESSLIST_ID таблицы threads:

    • Для фоновых потоков THREAD_ID и PROCESSLIST_ID представляют идентификатор соединения. Это то же самое значение, которое отображается в столбце ID таблицы INFORMATION_SCHEMA PROCESSLIST, отображается в столбце Id вывода SHOW PROCESSLIST и возвращается функцией CONNECTION_ID() внутри потока.

    • Для фоновых потоков THREAD_ID равно 0, а PROCESSLIST_ID равно NULL.

    У многих таблиц Performance Schema, помимо error_log, есть столбец с именем THREAD_ID, но в этих таблицах столбец THREAD_ID представляет собой значение, назначенное внутри Performance Schema.

  • PRIO

    Приоритет события. Допустимые значения: System, Error, Warning, Note. Столбец PRIO основан на поле label событий ошибок, которое в свою очередь основано на базовом численном значении поля prio.

  • ERROR_CODE

    Числовой код ошибки события. ERROR_CODE соответствует полю error_code событий ошибок.

  • SUBSYSTEM

    Подсистема, в которой произошло событие. SUBSYSTEM соответствует полю subsystem событий ошибок.

  • DATA

    Текстовое представление события ошибки. Формат этого значения зависит от формата, созданного компонентом приемника журнала, который генерирует строку error_log. Например, если приемник журнала — log_sink_internal или log_sink_json, значения DATA представляют события ошибок в традиционном или формате JSON соответственно. (См. раздел 7.4.2.9, «Формат вывода журнала ошибок».)

    Поскольку конфигурация журнала ошибок может быть изменена для изменения компонента приемника журнала, который предоставляет строки в таблицу error_log, и поскольку разные приемники создают разные форматы вывода, возможно, что строки, записанные в таблицу error_log в разное время, будут иметь разные форматы DATA.

Таблица error_log имеет следующие индексы:

  • Первичный ключ по (LOGGED)

  • Индекс по (THREAD_ID)

  • Индекс по (PRIO)

  • Индекс по (ERROR_CODE)

  • Индекс по (SUBSYSTEM)

Операция TRUNCATE TABLE запрещена для таблицы error_log.

Реализация и настройка таблицы error_log

Таблица Performance Schema error_log заполняется компонентами обработки журналов ошибок, которые записывают в таблицу, помимо форматированных событий ошибок в журнал ошибок. Поддержка Performance Schema у обработчиков журналов состоит из двух частей:

  • Обработчик журнала может записывать новые события ошибок в таблицу error_log по мере их возникновения.

  • Обработчик журнала может предоставить парсер для извлечения ранее записанных сообщений об ошибках. Это позволяет экземпляру сервера читать сообщения, записанные в файл журнала ошибок предыдущим экземпляром, и сохранять их в таблице error_log. Сообщения, записанные во время завершения работы предыдущим экземпляром, могут быть полезны для диагностики причин завершения работы.

В настоящее время традиционные log_sink_internal и JSON-форматированные log_sink_json обработчики поддерживают запись новых событий в таблицу error_log и предоставляют парсер для чтения ранее записанных файлов журнала ошибок.

Системная переменная log_error_services управляет включением компонентов журналов для регистрации ошибок. Ее значение представляет собой цепочку компонентов фильтрации журналов и обработчиков журналов, которые должны выполняться слева направо при возникновении событий ошибок. Значение log_error_services относится к заполнению таблицы error_log следующим образом:

  • При запуске сервер проверяет значение log_error_services и выбирает самый левый обработчик журналов, удовлетворяющий этим условиям:

    • Обработчик, поддерживающий таблицу error_log и предоставляющий парсер.

    • Если нет, обработчик, поддерживающий таблицу error_log, но не предоставляющий парсер.

    Если ни один обработчик журналов не удовлетворяет этим условиям, таблица error_log остается пустой. В противном случае, если обработчик предоставляет парсер и конфигурация журналов позволяет найти ранее записанный файл журнала ошибок, сервер использует парсер обработчика для чтения последней части файла и записывает содержащиеся в нем старые события в таблицу. Затем обработчик записывает новые события ошибок в таблицу по мере их возникновения.

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

    Если такого обработчика журнала нет, никакие дополнительные события ошибок не записываются в таблицу error_log. В противном случае, новый сконфигурированный обработчик записывает новые события ошибок в таблицу по мере их возникновения.

Любая конфигурация, которая влияет на вывод, записываемый в журнал ошибок, влияет на содержимое таблицы error_log. Это включает в себя такие параметры, как уровень подробности, подавление сообщений и фильтрация сообщений. Это также относится к информации, считанной при запуске из предыдущего файла журнала. Например, сообщения, которые не были записаны во время предыдущего экземпляра сервера с низким уровнем подробности, не станут доступными, если файл будет прочитан текущим экземпляром с более высоким уровнем подробности.

Таблица error_log представляет собой вид на кольцевой буфер фиксированного размера в оперативной памяти, при этом старые события автоматически удаляются по мере необходимости, чтобы освободить место для новых. Как показано в следующей таблице, несколько переменных состояния предоставляют информацию об активной работе с error_log.

Переменная состояния Значение
Error_log_buffered_bytes Используемые байты в таблице
Error_log_buffered_events Наличествующие события в таблице
Error_log_expired_events Удалённые из таблицы события
Error_log_latest_write Время последней записи в таблицу

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/performance-schema-error-log-table.html

Spec-Zone.ru

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