mysql8 配置日志文件_mysql8 参考手册--错误日志组件配置

姜晨
2023-12-01

错误日志包含mysqld 启动和关闭时间的记录。它还包含诊断消息,例如错误,警告和注释,它们在服务器启动和关闭期间以及服务器运行期间发生。例如,如果mysqld注意到需要自动检查或修复表,它将向错误日志中写入一条消息。

在某些操作系统上,如果mysqld异常退出,则错误日志包含堆栈跟踪 。该跟踪可用于确定mysqld退出的位置。

如果用于启动mysqld,则 mysqld_safe可能会将消息写入错误日志。例如,当mysqld_safe注意到异常的mysqld退出时,它将重新启动 mysqld并将mysqld restarted消息写入错误日志。

错误日志组件配置

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

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

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

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

3、内置的过滤器和编写器组件结合在一起以实现默认的错误日志格式。

4、可加载的编写器允许以JSON格式记录。

5、可加载的编写器允许登录到系统日志。

6、系统变量控制要启用的日志组件以及每个组件的运行方式。

log_error_services哪个日志组件系统变量控制以启用错误日志记录。该变量可以包含具有0、1或许多元素的列表。在后一种情况下,元素可以用分号或(从MySQL 8.0.12开始)逗号分隔,并可选地后跟空格。给定的设置不能同时使用分号和逗号分隔符。组件顺序很重要,因为服务器按照列出的顺序执行组件。

默认情况下,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_error_services值 的最后一个组成部分应该是writer。如果最终组件是过滤器,则该组件无效,因为过滤后的事件不会发送到任何编写器。

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

输出目标由--log-error选项确定 (在Windows上,由--pid-file和 --console)。它们确定是将错误消息写入控制台还是文件,如果写入文件,则确定错误日志文件名。

log_error_verbosity和 log_error_suppression_list 系统变量影响哪些类型的日志事件 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值中命名的可加载组件会 产生错误。

例如,要使用系统日志编写器(log_sink_syseventlog)而不是默认编写器(log_sink_internal),请首先加载编写器组件,然后修改 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';

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

如果组件是可加载的,请在运行时使用加载它 INSTALL COMPONENT。加载组件会将其注册到 mysql.component系统表中,以便服务器自动加载它以用于后续启动。

log_error_services 在启动时 设置值以包括组件名称。在服务器my.cnf文件中设置该值,或使用SET PERSIST,为正在运行的MySQL实例设置该值,并保存该值以用于随后的服务器重启。设置的值在 my.cnf下次重启时生效。使用设置的值将 SET PERSIST立即生效,并在随后的重启中生效。

假设您想要配置,为每个服务器启动时,使用JSON日志writer(中log_sink_json除)内置日志过滤器和writer(log_filter_internal, log_sink_internal)。如果未加载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

在这种情况下,日志事件将传递到第一个编写器,然后传递到内置过滤器,再传递到第二个编写器。第一作者收到未过滤的事件。第二个编写器接收已过滤的事件。如果希望一个日志包含所有日志事件的消息,而另一个日志仅包含部分日志事件的消息,则可以用这种方式配置错误日志记录。

 类似资料: