MySQL 日志详解:错误日志、慢查询日志与二进制日志全攻略

MySQL 日志中文详解:错误日志(log_error)、通用查询日志(general_log)、慢查询日志(slow_query_log/long_query_time)、二进制日志(binlog)四大日志的配置与用途、慢查询分析方法,以及观测云 DataKit 采集与告警落地方案。

最佳实践
MySQL 日志详解:错误日志、慢查询日志与二进制日志全攻略技术指南封面

MySQL 的日志体系围绕四类日志展开:错误日志管"实例健康"、慢查询日志管"性能"、通用查询日志管"全量审计"、二进制日志管"复制与恢复"。吃透这四类日志,MySQL 的运维排障就有了完整抓手。本文逐一讲解配置与实战用法,并给出观测云平台的落地方案。

核心要点速览

  • 错误日志默认开启:记录启动/关闭、崩溃、复制异常,是实例级故障的第一现场。
  • 慢查询日志是性能优化主武器slow_query_log=1 + long_query_time=1(甚至 0.x),配合 log_queries_not_using_indexes
  • 通用查询日志别在生产开:全量 SQL 记录量巨大,只用于短期排障。
  • binlog 不是"日志排查"工具:它服务复制与时间点恢复(PITR),治理重点是保留期与磁盘。

1. 错误日志(Error Log)

[mysqld]
log_error = /var/log/mysql/error.log

记录:启动/关闭过程、崩溃恢复(InnoDB recovery)、连接异常、复制线程状态。实例起不来、莫名重启,第一个看的就是它。MySQL 8.0 还支持 log_error_verbosity(1/2/3 递增详细)控制详略。

动态查看路径:SHOW VARIABLES LIKE 'log_error';

2. 慢查询日志(Slow Query Log)

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1                  # 超过 1 秒的查询记录
log_queries_not_using_indexes = 1    # 没走索引的查询也记录
log_slow_admin_statements = 1        # ALTER/ANALYZE 等管理语句也记录

每条慢查询记录包含:执行时间、锁等待时间、扫描行数、返回行数、执行用户与 SQL 原文。分析工具:

# mysqldumpslow 内置汇总
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log   # 按总耗时 Top10
# pt-query-digest 更强大的聚合分析
pt-query-digest /var/log/mysql/slow.log

生产建议 long_query_time 从 1 秒起步,优化成熟后逐步降到 0.2-0.5 秒。

3. 通用查询日志(General Log)

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log

记录所有到达服务器的 SQL 语句(不管是否执行成功)。审计价值高,但量巨大、有性能开销——生产只用于短期排障或定向审计,平时关闭。8.0 可以 SET GLOBAL general_log = 'ON' 动态开关,排障完即关。

4. 二进制日志(Binary Log)

[mysqld]
log_bin = /var/log/mysql/mysql-bin
binlog_expire_logs_seconds = 604800   # 保留 7 天
max_binlog_size = 1G
sync_binlog = 1                        # 每次提交刷盘,最安全

binlog 记录所有数据变更,用于主从复制与时间点恢复(mysqlbinlog 工具解析回放)。治理重点:保留期 × 写入速率 = 磁盘占用,写入密集实例要盯紧磁盘水位。

5. 其他值得知道的日志

  • InnoDB redo/undo log:引擎内部机制,不直接可读,但 redo 大小影响崩溃恢复时长;
  • performance_schema:内存中的事件统计,慢查询分析的现代替代品(events_statements_summary_by_digest 按 SQL 指纹聚合)。

观测云落地:MySQL 日志采集与分析

  1. 采集:观测云 DataKit 主机部署,conf.d/log/logging.conflogfiles 加入错误日志与慢查询日志路径,source: mysqlservice 标识实例;DataKit 也提供 MySQL 集成采集器(指标 + 慢查询)。
  2. 解析:Pipeline 提取慢日志中的 Query_time、Lock_time、Rows_examined 为字段,映射标准 statustime
  3. 告警:监控器对错误日志中的 ERRORcrashAborted_connects 关键字告警;慢查询速率(每分钟条数)超阈值告警,通知钉钉/企业微信/飞书。
  4. 分析:日志查看器聚合慢查询 SQL 指纹,按耗时分布出图;长期趋势进仪表板。
  5. 成本控制:慢日志走标准索引,全量审计日志(若开启)走低频/归档索引。

常见问题(FAQ)

慢查询日志会拖慢数据库吗?

开销很小(追加写文件),生产可常开。真正要注意的是 log_queries_not_using_indexes=1 在写入密集库上可能产生大量记录,先评估量再开。

general log 开了忘记关会怎么样?

磁盘被快速写满是常见事故。排障用完后立即 SET GLOBAL general_log = 'OFF';也可以用表输出(log_output=TABLE)定向到 mysql.general_log 表限量审计。

binlog 磁盘暴涨怎么治理?

调短 binlog_expire_logs_seconds;确认没有失效的从库拖着不消费(从库不取 binlog,主库不会删);大事务会产生巨大 binlog,应用侧拆批。

RDS/云数据库没有文件权限怎么采集?

云 RDS 提供日志下载或订阅 API(如慢日志订阅)。观测云支持云厂商日志集成,将 RDS 日志接入后同样享受检索、告警、仪表板能力。

系列阅读


获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台