在MySQL服务器维护的日志中,一个是错误日志,它将诊断消息写入其中错误日志).通常,服务器将诊断信息写入服务器主机上的文件或系统日志服务。从MySQL 8.0.22开始,根据错误日志配置,服务器还可以将最近的错误事件写入性能模式error_log
表格发放选择
特权error_log
表因此允许客户端和应用程序使用SQL查询访问错误日志内容,使dba能够提供对日志的访问,而不需要允许服务器主机上的直接文件系统访问。
的error_log
表支持基于其更结构化的列的集中查询。它还包括错误消息的全文,以支持更自由形式的分析。
表实现使用固定大小的内存中环形缓冲区,必要时自动丢弃旧事件,为新事件腾出空间。
例子error_log
内容:
mysql> SELECT * FROM performance_schemaerror_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
表中有以下列。如描述所示,除了数据
列对应于基础错误事件结构的字段,该结构在错误事件字段.
记录
事件时间戳,具有微秒精度。
记录
对应于时间
错误事件的字段,尽管存在某些潜在差异:时间
错误日志中的值将根据log_timestamps
系统变量设置;看到早期启动日志输出格式.的
记录
属性存储值时间戳
数据类型,其值存储在UTC,但在当前会话时区检索时显示;看到DATE、DATETIME和TIMESTAMP类型.
来显示
记录
如果与错误日志文件中显示的时区一致,请先设置会话的时区。设置@@session。时间_zone = @@global.log_timestamps;
如果
log_timestamps
值是UTC
您的系统没有安装命名时区支持(请参阅MySQL服务器时区支持),按如下方式设置时区:设置@@session。时间_zone = '+00:00';
THREAD_ID
MySQL线程ID。
THREAD_ID
对应于线程
错误事件字段。在性能架构中,
THREAD_ID
中的列。error_log
表是最类似的PROCESSLIST_ID
的列线程
表:对于前台线程,
THREAD_ID
而且PROCESSLIST_ID
表示连接标识符。属性中显示的值相同ID
的列INFORMATION_SCHEMA
PROCESSLIST
表中显示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_internal
或log_sink_json
,数据
值分别以传统格式或JSON格式表示错误事件。(见错误日志输出格式)。因为可以重新配置错误日志,以更改向
error_log
表,并且由于不同的接收器产生不同的输出格式,因此可以将行写入error_log
表在不同的时间有不同数据
格式。
的error_log
表中有这些索引:
主键(
记录
)索引(
THREAD_ID
)索引(
一家
)索引(
ERROR_CODE
)索引(
子系统
)
性能模式error_log
表由错误日志接收器组件填充,这些组件除向错误日志写入格式化错误事件外,还向表写入。日志接收器对性能模式的支持包括两部分:
目前,传统格式log_sink_internal
和json格式log_sink_json
接收器支持将新事件写入error_log
表,并提供一个解析器,用于读取以前编写的错误日志文件。
的log_error_services
系统变量控制哪些日志组件启用错误日志记录。它的值是一个由日志过滤器和日志接收器组件组成的管道,在发生错误事件时按从左到右的顺序执行。的log_error_services
值与填充error_log
表如下:
在启动时,服务器检查
log_error_services
值,并从中选择满足以下条件的最左边的日志接收器:如果没有日志接收器满足这些条件,则
error_log
表为空。否则,如果接收器提供解析器,并且日志配置允许找到以前编写的错误日志文件,则服务器使用接收器解析器读取文件的最后一部分,并将其中包含的旧事件写入表。接收器然后将发生的新错误事件写入表。在运行时,如果的值
log_error_services
更改后,服务器再次检查它,这一次查找最左侧启用的支持error_log
表,无论它是否提供解析器。如果不存在这样的日志接收器,则不会将其他错误事件写入
error_log
表格否则,新配置的接收器会在错误事件发生时将新的错误事件写入表。
任何影响写入错误日志的输出的配置都会影响error_log
表的内容。这包括用于详细信息、消息抑制和消息过滤的设置。它还适用于在启动时从以前的日志文件中读取的信息。例如,如果文件由配置了较高详细信息的当前实例读取,则在配置了较低详细信息的前一个服务器实例期间未写入的消息将不可用。
的error_log
表是固定大小的内存循环缓冲区上的视图,旧事件会自动丢弃,以便为新事件腾出空间。如下表所示,几个状态变量提供有关正在进行的信息error_log
操作。
状态变量 | 意义 |
---|---|
Error_log_buffered_bytes |
表中使用的字节数 |
Error_log_buffered_events |
表中显示的事件 |
Error_log_expired_events |
从表中丢弃的事件 |
Error_log_latest_write |
上次写入表的时间 |