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