28,MySQL 8.0参考手册 5.4.2.1错误日志组件配置

在MySQL 8.0中,错误日志记录使用第5.5节“MySQL服务器组件”中描述的MySQL组件体系结构 。错误日志子系统由执行日志事件过滤和写入的组件以及配置要启用哪些组件以实现所需日志记录结果的系统变量组成。

本节讨论如何选择用于错误记录的组件。有关特定于系统日志和JSON日志编写器的说明,请参见第5.4.2.3节“错误日志记录到系统日志”和 第5.4.2.4节“JSON格式的错误日志记录”。有关所有可用日志组件的更多详细信息,请参见 第5.5.1节“错误日志组件”。

基于组件的错误日志提供了以下功能:

日志事件可以被过滤器组件过滤以影响可用于写入的信息。

日志事件由汇(写)器组件输出。可以启用多个接收器组件,将错误日志输出写入多个目标。

内置的过滤器和写入器组件组合起来实现默认的错误记录格式。

可加载的作家可以记录到系统日志。

可加载的作家可以使用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_error_services分配的值不包含写入程序组件,则不会从该点写入日志输出。

组合log_filter_internal并 log_sink_internal实现默认的错误日志过滤和输出行为。这些组件的操作受其他服务器选项和系统变量的影响:

输出目标由--log-error选项决定 (并在Windows上--pid-file和 --console)。这些决定了是否将错误消息写入控制台或文件,并且如果是对文件,错误日志文件名称。

该log_error_verbosity 系统变量会影响哪些类型的日志事件 log_filter_internal许可证或者抑制。

要更改用于错误记录的日志组件组,必要时加载组件并修改该 log_error_services值。添加或删除日志组件受以下限制:

要启用日志组件,首先使用它 INSTALL COMPONENT(除非它是内置的或已经加载的),然后将该组件列入该log_error_services 值。

对于要在该log_error_services值中允许的组件 ,它必须是已知的。如果组件是内置的,或者它是可加载的并且已使用加载,则该组件是已知的 INSTALL COMPONENT。尝试在服务器启动时将未知组件命名为 log_error_services默认值。尝试在运行时命名未知组件会产生错误,并且该 log_error_services值保持不变。


要禁用日志组件,请将其从该log_error_services值中删除 。然后,如果组件可加载,并且您还想卸载它,请使用UNINSTALL COMPONENT。


尝试使用UNINSTALL COMPONENT卸载仍在该log_error_services值中命名的可加载组件时会 产生错误。


例如,要使用系统日志writer(log_sink_syseventlog)而不是默认writer(log_sink_internal),首先加载writer组件,然后修改

该 log_error_services值:

INSTALL COMPONENT 'file://component_log_sink_syseventlog';
SET GLOBAL log_error_services = 'log_filter_internal; log_sink_syseventlog';
注意

用于加载日志组件的URN INSTALL COMPONENT是带有前缀的组件名称 file://component_例如,对于 log_sink_syseventlog组件,相应的URN是file://component_log_sink_syseventlog

可以配置多个日志写入器将输出发送到多个目标。除了(而不是)默认写入器之外,为了启用系统日志写入器,请将log_error_services设置为 

SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal; log_sink_syseventlog';

要恢复为只使用默认编写器并卸载系统日志编写器,请执行以下语句:学什么专业好

SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal;
UNINSTALL COMPONENT 'file://component_log_sink_syseventlog';

要在每个服务器启动时配置要启用的日志组件,请使用以下过程:

  1. 如果该组件可加载,请使用该组件 INSTALL COMPONENT加载组件将其注册到 mysql.component系统表中,以便服务器为后续启动自动加载它。

  2. log_error_services 在启动时 设置该值以包含组件名称。在服务器my.cnf文件中设置该值,或使用SET PERSIST它设置正在运行的MySQL实例的值,并保存用于后续服务器重新启动的值; 请参见 第13.7.5.1节“变量赋值的SET语法”设置的值将在 my.cnf下次重新启动时生效。设置的值 SET PERSIST立即生效,并用于随后的重新启动。

假设您想为每个服务器启动配置log_sink_json除了内置日志过滤器和写入器(log_filter_internal, log_sink_internal之外的JSON日志writer()。如果未加载,请先加载JSON编写器:

INSTALL COMPONENT 'file://component_log_sink_json';

然后log_error_services在服务器启动时设置生效。您可以将其设置在 my.cnf

[mysqld]
log_error_services='log_filter_internal; log_sink_internal; log_sink_json'

或者您可以使用SET PERSIST以下设置 

SET PERSIST log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';

命名的组件顺序 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

在这种情况下,日志事件传递给第一个写入器,然后传递给内置过滤器,然后传递给第二个写入器。第一位作者收到未经过滤的事件。第二个作家接收过滤的事件。如果您希望一个日志包含所有日志事件的消息,并且另一个消息仅包含一部分日志事件的消息,则可以以此方式配置错误日志记录。

猜你喜欢

转载自blog.csdn.net/dandan520520/article/details/79893420
今日推荐