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_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.