10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

27.12.21.1 error_log表

在MySQL服务器维护的日志中,一个是错误日志,它将诊断消息写入其中(参见第5.4.2节“错误日志”).通常,服务器将诊断信息写入服务器主机上的文件或系统日志服务。从MySQL 8.0.22开始,根据错误日志配置,服务器还可以将最新的错误事件写入Performance Schemaerror_log表格发放选择特权的error_log表使客户端和应用程序可以使用SQL查询访问错误日志内容,使dba能够提供对日志的访问,而不需要允许对服务器主机上的直接文件系统访问。

error_log表支持基于其更结构化的列的集中查询。它还包括错误消息的全文,以支持更自由形式的分析。

表实现使用固定大小的内存环缓冲区,旧事件会在必要时自动丢弃,为新事件腾出空间。

例子error_log内容:

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.0.23) 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

error_log表有以下列。如描述所示,除了数据中的基础错误事件结构的字段对应第5.4.2.3节,“错误事件字段”

  • 记录

    具有微秒精度的事件时间戳。记录对应于时间误差事件场,尽管有某些潜在的差异:

    来显示记录与错误日志文件中显示的时区一致,首先按如下方法设置会话时区:

    设置@@session。时间_zone = @@global.log_timestamps;

    如果log_timestamps值是UTC您的系统没有安装命名时区支持(请参阅“MySQL服务器时区支持”章节5.1.15),像这样设置时区:

    设置@@session。时间_zone = '+00:00';
  • THREAD_ID

    MySQL线程ID。THREAD_ID对应于线程错误事件字段。

    在性能架构中,THREAD_IDerror_log表是最类似的PROCESSLIST_ID列的线程表:

    • 对于前台线程,THREAD_ID而且PROCESSLIST_ID表示连接标识符。中显示的值相同ID列的INFORMATION_SCHEMAPROCESSLIST表中显示的Id列的显示PROCESSLIST,并由CONNECTION_ID ()线程内的函数。

    • 后台线程,THREAD_ID是0,PROCESSLIST_ID

    许多性能模式表,而不是error_log列名为THREAD_ID,但在这些表中,THREAD_ID列是由性能架构在内部分配的值。

  • 一家

    事件优先级。允许的值系统错误警告请注意.的一家列是基于标签字段的错误事件,它本身是基于底层的数字一家字段值。

  • ERROR_CODE

    数字事件错误码。ERROR_CODE对应于error_code错误事件字段。

  • 子系统

    事件发生的子系统。子系统对应于子系统错误事件字段。

  • 数据

    错误事件的文本表示形式。该值的格式取决于生成日志接收器组件生成的格式error_log行。例如,如果日志接收器是log_sink_internallog_sink_json数据值分别以传统格式或JSON格式表示错误事件。(见第5.4.2.9节“错误日志输出格式”)。

    因为可以重新配置错误日志,以更改向类提供行的日志接收组件error_log表,由于不同的接收器产生不同的输出格式,因此可以将行写入error_log表在不同的时间有不同数据格式。

error_log表有以下索引:

  • 主键(记录

  • 指数(THREAD_ID

  • 指数(一家

  • 指数(ERROR_CODE

  • 指数(子系统

截断表是不允许的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_logTable是固定大小的内存环缓冲区上的视图,旧事件会根据需要自动丢弃,以便为新事件腾出空间。如下表所示,几个状态变量提供了关于正在进行的信息error_log操作。

状态变量 意义
Error_log_buffered_bytes 表中使用的字节数
Error_log_buffered_events 表中出现的事件
Error_log_expired_events 从表中丢弃的事件
Error_log_latest_write 最后写入表的时间