大家好!我是只谈技术不剪发的 Tony 老师。今天我们来谈谈 MysqL 服务器中各种日志文件的作用以及相关配置选项。
MysqL 提供了一套完整的服务器日志体系,包含了多种日志类型,可以帮助我们查找、解决系统问题和优化数据库的性能。
日志类型 | 记录信息 |
---|---|
错误日志 | 启动、运行、停止 MysqLd 时出现的问题 |
通用查询日志 | 建立的客户端连接和客户端提交的语句 |
慢查询日志 | 执行时间超过 long_query_time(默认为 10 秒)的查询 |
二进制日志 | 修改数据的语句,也用于复制 |
中继日志 | 从复制主节点接收到的数据变更 |
DDL日志 | 元数据日志,DDL 语句执行的元数据操作 |
默认情况下,服务器的日志文件都位于数据目录(datadir)中。
错误日志
MysqL 错误日志(error log)记录了 MysqLd 启动和停止的相关信息,同时还记录了服务器在启动、停止以及运行期间发生的诊断消息,例如错误、警告和通知等。例如,当 MysqLd 发现某个表需要执行自动检查或修复时,它会向错误日志中写入一条消息。
默认安装时,错误日志通常在配置文件(my.cnf 或者 my.ini)中 MysqLd 部分的 log-error 配置项进行设置;利用 MysqL 系统变量 log_error 可以查看错误日志的文件名:
MysqL> show variables like 'log_error';
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| log_error | /var/log/MysqLd.log |
+---------------+---------------------+
1 row in set (0.01 sec)
如果查询结果为 stderr,表示标准错误输出,也就是终端或控制台窗口。
从 MysqL 8.0 开始,错误日志采用了 MysqL 组件体系结构,由执行日志过滤和写入的多个组件构成,系统变量 log_error_services 配置了用于生成错误日志的组件。当 log_error 系统变量指定了默认的错误日志文件之后,日志写入器组件可能基于该值设置自己的输出文件,或者使用单独的输出文件:
- 如果 log_error 设置为 stderr,默认的错误日志将会输出到控制台;日志写入器组件 log_sink_internal、log_sink_json 以及 log_sink_test 都会输出到控制台,但是 log_sink_syseventlog 的输出目标为系统日志文件,而不是 log_error。
- 如果 log_error 设置为系统文件,默认的错误日志将会输出到该文件;日志写入器组件 log_sink_internal 和 log_sink_test 都会输出到该文件;log_error_services 中配置的多个 log_sink_json 将会使用文件名加上带编号的 .NN.json 文件:file_name.00.json、file_name.01.json 等;log_sink_syseventlog 的输出目标为系统日志文件,而不是 log_error。