MySQL复制日志分析主要围绕二进制日志(binary log)展开,因为它是主从复制的核心机制。通过分析这些日志,可以排查复制延迟、数据不一致或SQL执行错误等问题。
启用并查看二进制日志
确保主库已开启二进制日志功能。检查配置文件 my.cnf 或 my.ini 中是否包含以下内容:
[mysqld]log-bin=mysql-bin
server-id=1
重启服务后,MySQL 会在数据目录生成如 mysql-bin.000001 的日志文件。使用 mysqlbinlog 工具读取内容:
mysqlbinlog mysql-bin.000001可添加 --start-datetime 和 --stop-datetime 参数限定时间范围,便于定位问题时间段。
分析事件类型与结构
二进制日志包含多种事件类型,例如 Query_log_event(执行的SQL语句)、Write_rows_log_event(插入行)、Update_rows_log_event 和 Delete_rows_log_event。启用行模式复制时,建议使用 --verbose 参数解析成可读SQL:
mysqlbinlog --verbose mysql-bin.000001关注输出中的 GTID(如果启用了GTID复制),有助于追踪事务在主从之间的传播情况。
结合复制线程状态诊断问题
登录从库执行 SHOW SLAVE STATUS\G,重点关注以下字段:
Slave_IO_Running:是否正常拉取主库日志 Slave_SQL_Running:是否能正常回放中继日志 Last_Error:最近报错信息,常指向具体SQL或约束冲突 Seconds_Behind_Master:复制延迟秒数若 SQL 线程停止,根据 Last_Error 提示找到对应位置,在主库的 binlog 中用 mysqlbinlog 定位该事务内容,分析是语句不兼容、主键冲突还是其他原因。
监控与自动化分析工具
手动分析适合偶发问题,长期运维建议引入监控手段:
使用 pt-heartbeat(Percona Toolkit)精确测量复制延迟 部署 Prometheus + MySQL Exporter 收集复制指标 通过脚本定期解析 binlog 统计 DML 频率,识别异常高峰对于复杂环境,可将 binlog 同步到 Kafka 进行实时解析和告警处理。
基本上就这些,关键是掌握 mysqlbinlog 工具和 SHOW SLAVE STATUS 输出解读,再配合一些辅助工具提升效率。
