Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.22.2 错误日志表

MySQL服务器维护的日志中,有一张是错误日志,它记录了诊断信息(参见第7.4.2节,“错误日志”)。通常,服务器在服务器主机上或系统日志服务中写入诊断信息。根据错误日志配置,服务器也可以将最新的错误事件写入性能_schema中的error_log表。授予对error_log表的SELECT权限给客户端和应用程序,可以让它们使用SQL查询访问错误日志内容,从而使DBA能够提供对日志的访问,而无需在服务器主机上允许直接文件系统访问。

性能_schema中的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 8.4.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

性能_schema中的error_log表具有以下列。如描述所示,除了DATA列外,其余所有列都对应于错误事件结构的字段,该结构在第7.4.2.3节,“错误事件字段”中描述。

性能模式的error_log表有这些索引:

  • 主键在(LOGGED)上

  • 索引在(THREAD_ID)上

  • 索引在(PRIO)上

  • 索引在(ERROR_CODE)上

  • 索引在(SUBSYSTEM)上

TRUNCATE TABLE不允许对error_log表进行操作。

性能模式的error_log表由错误日志汇总组件填充,这些组件除了将新错误事件写入表之外,还会向error_log表中写入格式化的错误事件。性能模式日志支持由日志汇总组件提供两个部分:

  • 一个日志汇总组件可以在发生时将新错误事件写入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表并提供解析器的收集器。

    • 如果没有,支持error_log表但不提供解析器的收集器。

    如果没有满足这些条件的日志收集器,error_log表将保持为空。否则,如果收集器提供解析器,并且日志配置允许找到一个之前写入的错误日志文件,服务器使用收集器解析器读取文件的最后部分,并将其中包含的旧事件写入到表中。然后,收集器将为其发生的新错误事件写入表。

  • 运行时,如果log_ error_services的值发生变化,服务器再次检查它,这次查找左侧启用的日志收集器,该收集器支持error_log表,无论是否提供解析器。

    如果没有这样的日志收集器,不会向error_log表中写入额外的错误事件。否则,新配置的收集器将为其发生的新错误事件写入表。

影响错误日志输出的任何配置都会影响error_log表中的内容。这包括设置如详细程度、消息抑制和消息过滤。它也适用于在启动时从前一份日志文件中读取的信息。例如,由于服务器实例配置了低详细程度而未写入的消息,在当前实例配置了更高详细程度的情况下不会变得可用。

error_log表是一个固定大小的内存环形缓冲区,旧事件会自动被丢弃以腾出空间给新事件。如以下表格所示,一些状态变量提供了关于error_log操作的信息。

Status Variable Meaning
Error_log_buffered_bytes 表中使用的字节数
Error_log_buffered_events 表中的事件数目
Error_log_expired_events 从表中丢弃的事件数目
Error_log_latest_write 写入表的最后时间