MySQL8.0错误日志Error log介绍

理论知识

错误日志内容

错误日志包含 mysqld 启动和关闭的时间信息,还包含诊断消息,如服务器启动和关闭期间以及服务器运行时出现的错误、警告和其他需要注意的信息。

例如:如果 mysqld 检测到某个表需要检查或修复,会写入错误日志。

根据错误日志配置,错误消息还可能填充 performance_schema.error_log 表,以便为日志提供SQL接口,使错误日志能够查询。

如果用 mysqld_safe 启动 mysqld,mysqld_safe 会将消息写入错误日志。

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

错误日志组件架构

在 MySQL 8.0 中,错误日志使用 MySQL 组件(component) 架构。

错误日志系统由执行日志事件过滤和写出组件以及系统变量组成,该系统变量配置启用哪些组件来实现所需的日志记录。

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

  • 过滤器组件可以过滤日志事件,以影响写入的信息。
  • 日志事件由sink(写出)组件输出。可以启用多个写出组件,以将错误日志输出到多个目标。
  • 内置的过滤和写出组件结合起来实现默认的错误日志格式。
  • 支持JSON格式的日志记录。
  • 支持记录到操作系统日志。

log_error_services系统变量控制为错误记录启用哪些日志组件。

多个组件用逗号或分号分隔,日志系统按照此顺序依次执行。组件分过滤filter和写出sink两类。filter类组件过滤错误日志信息,sink类组件将错误日志写到不同的位置。

filter类组件


过滤器组件 过滤依据 相关系统变量
log_filter_internal 错误事件的优先级及错误代码 log_error_verbosity
log_error_suppression_list
log_filter_dragnet 用户定义的规则 dragnet.log_error_filter_rules

sink类组件

系统变量log_error指定错误日志的缺省目的地,日志组件根据该系统变量决定自己的日志输出目的地。


sink类日志组件 log_error值 目的地
log_sink_internal(缺省) file_name file_name
log_sink_internal stderr 控制台
log_sink_json stderr 控制台
log_sink_json file_name file_name.00.json
file_name.01.json
log_sink_test stderr 控制台
log_sink_test file_name file_name
log_sink_syseventlog stderr 系统日志
log_sink_syseventlog file_name 系统日志

2. 运维操作

查询当前的错误日志配置(示例为缺省值)

mysql> SELECT @@GLOBAL.log_error_services;+----------------------------------------+| @@GLOBAL.log_error_services         |+----------------------------------------+| log_filter_internal; log_sink_internal |+----------------------------------------+