7.4.2.1 Настройка журнала ошибок
В MySQL 9.2 регистрация ошибок использует архитектуру компонентов MySQL, описанную в разделе 7.5, «Компоненты MySQL». Подсистема журнала ошибок состоит из компонентов, выполняющих фильтрацию событий журнала и запись, а также системной переменной, которая настраивает, какие компоненты загрузить и включить для получения желаемого результата регистрации.
В этом разделе рассматривается, как загрузить и включить компоненты для регистрации ошибок. Инструкции, специфичные для фильтров журналов, см. в разделе 7.4.2.4, «Типы фильтрации журнала ошибок». Инструкции, специфичные для приемников JSON и системного журнала, см. в разделе 7.4.2.7, «Регистрация ошибок в формате JSON» и разделе 7.4.2.8, «Регистрация ошибок в системном журнале». Дополнительные сведения обо всех доступных компонентах журнала см. в разделе 7.5.3, «Компоненты журнала ошибок».
Регистрация ошибок на основе компонентов предлагает следующие возможности:
События журнала, которые можно фильтровать с помощью компонентов фильтра, чтобы повлиять на доступную для записи информацию.
События журнала, которые выводятся компонентами приемников (записывающими компонентами). Можно включить несколько компонентов приемников для записи вывода журнала ошибок в несколько пунктов назначения.
Встроенные компоненты фильтров и приемников, которые реализуют стандартный формат журнала ошибок.
Загружаемый приемник, который позволяет регистрировать события в формате JSON.
Загружаемый приемник, который позволяет регистрировать события в системном журнале.
Системные переменные, которые управляют загрузкой и включением компонентов журнала, а также тем, как работает каждый компонент.
Настройка журнала ошибок описана в следующих разделах этого раздела:
Значения по умолчанию для настройки журнала ошибок
Системная переменная log_error_services управляет загрузкой компонентов журнала и их включением для регистрации ошибок. По умолчанию, log_error_services имеет значение, показанное здесь:
mysql> SELECT @@GLOBAL.log_error_services;
+----------------------------------------+
| @@GLOBAL.log_error_services |
+----------------------------------------+
| log_filter_internal; log_sink_internal |
+----------------------------------------+
Это значение указывает, что события журнала сначала проходят через компонент фильтра log_filter_internal, затем через компонент приемника log_sink_internal, оба из которых являются встроенными компонентами. Фильтр изменяет события журнала, видимые компонентами, указанными позже в значении log_error_services. Приемник — это пункт назначения для событий журнала. Обычно приемник обрабатывает события журнала в сообщения журнала с определенным форматом и записывает эти сообщения в соответствующий вывод, например, в файл или системный журнал.
Сочетание log_filter_internal и log_sink_internal реализует стандартное поведение фильтрации и вывода журнала ошибок. Действия этих компонентов зависят от других параметров сервера и системных переменных:
Пункт назначения вывода определяется параметром
--log-error(и, в Windows,--pid-fileи--console). Они определяют, следует ли записывать сообщения об ошибках в консоль или файл и, если в файл, имя файла журнала ошибок. См. раздел 7.4.2.2, «Настройка стандартного пункта назначения журнала ошибок».Системные переменные
log_error_verbosityиlog_error_suppression_listвлияют на то, какие типы событий журналаlog_filter_internalразрешает или подавляет. См. раздел 7.4.2.5, «Фильтрация журнала ошибок на основе приоритета (log_filter_internal)».
При настройке log_error_services учитывайте следующие характеристики:
Список компонентов журнала может быть разделен точками с запятой или запятыми, за которыми могут следовать пробелы. В данном значении нельзя использовать одновременно точки с запятой и запятые в качестве разделителей. Порядок компонентов важен, так как сервер выполняет компоненты в указанном порядке.
-
Последний компонент в значении
log_error_servicesне может быть фильтром. Это ошибка, поскольку любые изменения, которые он вносит в события, не повлияют на вывод:mysql>
SET GLOBAL log_error_services = 'log_filter_internal';ERROR 1231 (42000): Variable 'log_error_services' can't be set to the value of 'log_filter_internal'Для исправления этой проблемы добавьте приемник в конец значения:
mysql>
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal'; -
Порядок компонентов, указанных в
log_error_services, имеет значение, особенно в отношении относительного порядка фильтров и приемников. Рассмотрим это значениеlog_error_services:log_filter_internal; log_sink_1; log_sink_2
В этом случае события журнала передаются в встроенный фильтр, затем в первый приемник, затем во второй приемник. Оба приемника получают отфильтрованные события журнала.
Сравните это со значением
log_error_services:log_sink_1; log_filter_internal; log_sink_2
В этом случае события журнала передаются в первый приемник, затем в встроенный фильтр, затем во второй приемник. Первый приемник получает неотфильтрованные события. Второй приемник получает отфильтрованные события. Вы можете настроить регистрацию ошибок таким образом, если вам нужен один журнал, содержащий сообщения обо всех событиях журнала, и другой журнал, содержащий сообщения только для подмножества событий журнала.
Методы конфигурации журнала ошибок
Конфигурация журнала ошибок включает в себя загрузку и активацию компонентов журнала ошибок по мере необходимости, а также выполнение конфигурации, специфичной для компонента.
Существует два метода конфигурации журнала ошибок: неявный и явный. Рекомендуется выбрать один метод конфигурации и использовать его исключительно. Использование обоих методов может привести к предупреждениям при запуске. Дополнительную информацию см. в разделе Устранение неполадок при конфигурации.
-
Неявная конфигурация журнала ошибок
Этот метод конфигурации загружает и активирует компоненты журнала, определенные переменной
log_error_services. Загружаемые компоненты, которые еще не загружены, загружаются неявным образом при запуске до того, как движок храненияInnoDBбудет полностью доступен. Этот метод конфигурации имеет следующие преимущества:Компоненты журнала загружаются на ранней стадии процесса запуска, до движка хранения
InnoDB, что делает информацию, записанную в журнал, доступной раньше.Это предотвращает потерю буферизованной информации журнала в случае сбоя во время запуска.
Установка компонентов журнала ошибок с помощью
INSTALL COMPONENTне требуется, что упрощает конфигурацию журнала ошибок.
Чтобы использовать этот метод, см. Неявную конфигурацию журнала ошибок.
-
Явная конфигурация журнала ошибок
ПримечаниеЭтот метод конфигурации поддерживается для обратной совместимости. Рекомендуется использовать неявный метод конфигурации.
Этот метод конфигурации требует загрузки компонентов журнала ошибок с помощью
INSTALL COMPONENT, а затем настройкиlog_error_servicesдля активации компонентов журнала.INSTALL COMPONENTдобавляет компонент в таблицуmysql.component(таблицаInnoDB), и компоненты, которые необходимо загрузить при запуске, считываются из этой таблицы, которая доступна только после инициализацииInnoDB.Информация, записанная в журнал, буферизуется во время последовательности запуска, пока инициализируется движок хранения
InnoDB, что иногда затягивается операциями, такими как восстановление и обновление словаря данных, которые происходят во время последовательности запускаInnoDB.Чтобы использовать этот метод, см. Явную конфигурацию журнала ошибок.
Неявная конфигурация журнала ошибок
В этом разделе описано, как неявным образом загрузить и активировать компоненты журнала ошибок с использованием log_error_services. Обсуждение методов конфигурации журнала ошибок см. в разделе Методы конфигурации журнала ошибок.
Чтобы неявным образом загрузить и активировать компоненты журнала ошибок:
-
Перечислите компоненты журнала ошибок в значении
log_error_services.Для загрузки и активации компонентов журнала ошибок при запуске сервера установите
log_error_servicesв файле параметров. Следующий пример настраивает использование JSON-потока журнала (log_sink_json) в дополнение к встроенному фильтру и потоку журнала (log_filter_internal,log_sink_internal).[mysqld] log_error_services='log_filter_internal; log_sink_internal; log_sink_json'
ПримечаниеДля использования JSON-потока журнала (
log_sink_syseventlog) вместо стандартного потока (log_sink_internal) необходимо заменитьlog_sink_internalнаlog_sink_json.Для немедленной загрузки и активации компонента и последующих перезапусков установите
log_error_servicesс помощьюSET PERSIST:SET PERSIST log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';
-
Если компонент журнала ошибок предоставляет системные переменные, которые должны быть установлены для успешной инициализации компонента, присвойте этим переменным соответствующие значения. Вы можете установить эти переменные в файле параметров или с помощью
SET PERSIST.ВажноПри реализации неявной конфигурации сначала установите
log_error_servicesдля загрузки компонента и экспонирования его системных переменных, а затем установите переменные компонента после этого. Этот порядок конфигурации требуется независимо от того, выполняется ли присвоение переменных в командной строке, в файле параметров или с помощьюSET PERSIST.
Чтобы отключить компонент журнала, удалите его из значения log_error_services. Также удалите все связанные настройки переменных компонента, которые вы определили.
Неявная загрузка компонента журнала с использованием log_error_services не влияет на таблицу mysql.component. Он не добавляет компонент в таблицу mysql.component, а также не удаляет компонент, ранее установленный с помощью INSTALL COMPONENT, из таблицы mysql.component.
Явное конфигурирование журнала ошибок
Данная процедура описывает, как явно загрузить и включить компоненты ведения журнала ошибок, загрузив компоненты с помощью INSTALL COMPONENT, а затем включив их с помощью log_error_services. Для обсуждения методов конфигурации журнала ошибок см. Методы конфигурации журнала ошибок.
Для явного загрузки и включения компонентов ведения журнала ошибок:
-
Загрузите компонент с помощью
INSTALL COMPONENT(если он не встроен или не загружен). Например, для загрузки приемника JSON-логирования выполните следующую команду:INSTALL COMPONENT 'file://component_log_sink_json';
Загрузка компонента с помощью
INSTALL COMPONENTрегистрирует его в системеmysql.component, чтобы сервер автоматически загружал его при последующих запусках после инициализацииInnoDB.Используемый URN при загрузке компонента журнала с помощью
INSTALL COMPONENT— это имя компонента, предваряемоеfile://component_. Например, для компонентаlog_sink_jsonсоответствующий URN —file://component_log_sink_json. Список URN для компонентов журнала ошибок см. в разделе 7.5.3 «Компоненты журнала ошибок». Если компонент журнала ошибок использует системные переменные, которые должны быть заданы для успешной инициализации компонента, присвойте соответствующие значения этим переменным. Вы можете задать эти переменные в файле опций или с помощью
SET PERSIST.-
Включите компонент, указав его в значении
log_error_services.ВажноПри явном загрузке компонентов журнала с помощью
INSTALL COMPONENTне сохраняйте и не задавайтеlog_error_servicesв файле опций, который подразумевает загрузку компонентов журнала при запуске. Вместо этого включайте компоненты журнала во время выполнения с помощью оператораSET GLOBAL.Следующий пример настраивает использование приемника JSON-логирования (
log_sink_json) в дополнение к встроенному фильтру и приемнику журнала (log_filter_internal,log_sink_internal).SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';
ПримечаниеДля использования приемника JSON-логирования (
log_sink_syseventlog) вместо стандартного приемника (log_sink_internal), заменитеlog_sink_internalнаlog_sink_json.
Для отключения компонента журнала, удалите его из значения log_error_services. Затем, если компонент загружаемый, и вы хотите его разгрузить, используйте UNINSTALL COMPONENT. Также удалите все связанные с ним настройки переменных компонента.
Попытки использовать UNINSTALL
COMPONENT для разгрузки загружаемого компонента, который всё ещё указан в значении log_error_services, приведут к ошибке.
Изменение метода конфигурации журнала ошибок
Если вы ранее загружали компоненты журнала ошибок явно с помощью INSTALL COMPONENT и хотите переключиться на неявную конфигурацию, как описано в Неявной конфигурации журнала ошибок, рекомендуются следующие шаги:
-
Верните
log_error_servicesк его значению по умолчанию.SET GLOBAL log_error_services = 'log_filter_internal,log_sink_internal';
-
Используйте
UNINSTALL COMPONENTдля удаления ранее установленных загружаемых компонентов логирования. Например, если вы ранее установили приемник JSON-логирования, удалите его так:UNINSTALL COMPONENT 'file://component_log_sink_json';
Удалите все настройки переменных компонента для удалённого компонента. Например, если переменные компонента были заданы в файле опций, удалите эти настройки из файла. Если переменные компонента были заданы с помощью
SET PERSIST, используйтеRESET PERSISTдля сброса настроек.Выполните шаги, описанные в Неявной конфигурации журнала ошибок для повторной реализации конфигурации.
Если вам нужно перейти от неявной конфигурации к явной, выполните следующие шаги:
-
Верните
log_error_servicesк значению по умолчанию, чтобы разгрузить неявные компоненты журнала.SET GLOBAL log_error_services = 'log_filter_internal,log_sink_internal';
Удалите все настройки переменных компонентов, связанные с удалёнными компонентами. Например, если переменные компонентов были заданы в файле опций, удалите эти настройки из файла. Если переменные компонентов были заданы с помощью
SET PERSIST, используйтеRESET PERSISTдля сброса настроек.Перезапустите сервер, чтобы удалить компоненты журнала, которые были загружены неявно.
Следуйте инструкциям в Явной конфигурации журнала ошибок для повторной реализации конфигурации.
Устранение неполадок конфигурации
Компоненты журнала, перечисленные в значении log_error_services при запуске, загружаются неявно на ранней стадии запуска MySQL Server. Если компонент журнала был загружен ранее с помощью INSTALL COMPONENT, сервер пытается загрузить компонент позже в последовательности запуска, что приводит к предупреждению Невозможно загрузить компонент из указанного URN: 'file://component_component_name'.
Вы можете проверить это предупреждение в журнале ошибок или запросив таблицу Performance Schema error_log с помощью следующего запроса:
SELECT error_code, data
FROM performance_schema.error_log
WHERE data LIKE "%'file://component_%"
AND error_code="MY-013129" AND data LIKE "%MY-003529%";
Для предотвращения этого предупреждения следуйте инструкциям в Методе изменения конфигурации журнала ошибок, чтобы настроить конфигурацию журнала ошибок. Нужно использовать либо явную, либо неявную конфигурацию журнала ошибок, но не обе одновременно.
Аналогичная ошибка возникает при попытке явной загрузки компонента, который был загружен неявно при запуске. Например, если log_error_services содержит компонент JSON-приёмника журнала, этот компонент загружается неявно при запуске. Попытка явной загрузки того же компонента позже возвращает эту ошибку:
mysql> INSTALL COMPONENT 'file://component_log_sink_json';
ERROR 3529 (HY000): Cannot load component from specified URN: 'file://component_log_sink_json'.
Настройка нескольких приемников журнала
Возможна настройка нескольких приемников журналов, что позволяет отправлять выходные данные на несколько пунктов назначения. Для включения приемника JSON-логирования в дополнение к (а не вместо) стандартного приемника задайте значение log_error_services следующим образом:
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';
Для возврата к использованию только стандартного приемника и разгрузки системного приемника журнала, выполните эти команды:
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal;
UNINSTALL COMPONENT 'file://component_log_sink_json';
Поддержка приемника журнала в Performance Schema
Если включенные компоненты журнала включают приемник, поддерживающий Performance Schema, события, записанные в журнал ошибок, также записываются в таблицу Performance Schema error_log. Это позволяет анализировать содержимое журнала ошибок с помощью запросов SQL. В настоящее время традиционный log_sink_internal и JSON-формат log_sink_json приемники поддерживают эту функциональность. См. Раздел 29.12.22.2, «Таблица error_log».
© 2025 Oracle
Licensed under the GPLv2 License.