Spec-Zone.ru › MySQL 8.4

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 8.4.4) 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.

END_OF_DOCUMENT_MARKER
Реализация и настройка таблицы 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-8.4-en/performance-schema-error-log-table.html

Spec-Zone.ru

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