MySQL的二进制日志(binlog)会完整记录数据库中所有数据变更相关的操作,包括增删改语句、表结构变更等,是数据库运维中排查问题、数据恢复的重要参考。通过mysqlbinlog工具可以读取二进制日志的原始内容,转换为可读的SQL语句或操作记录。

mysqlbinlog工具基础说明
mysqlbinlog是MySQL安装包自带的命令行工具,通常和mysql客户端在同一安装目录下。它的核心作用是将二进制的日志文件转换为文本格式,方便用户查看和分析。使用前需要确认MySQL的二进制日志功能已经开启,可以通过如下SQL语句查看开启状态:
-- 查看二进制日志是否开启 SHOW VARIABLES LIKE 'log_bin'; -- 查看当前二进制日志文件列表 SHOW BINARY LOGS;
如果log_bin的值为ON,说明二进制日志功能已开启,否则需要修改MySQL配置文件开启该功能后重启服务。
指定时间段解析的核心参数
mysqlbinlog支持通过时间范围筛选日志内容,两个核心参数如下:
- --start-datetime:指定解析的起始时间,格式为
YYYY-MM-DD HH:MM:SS - --stop-datetime:指定解析的结束时间,格式和起始时间一致
这两个参数可以单独使用,也可以组合使用。单独使用--start-datetime会解析从该时间开始到日志末尾的所有内容;单独使用--stop-datetime会解析从日志开头到该时间结束的所有内容。
具体解析操作步骤
1. 确认二进制日志文件路径
先通过SQL语句查看当前正在写入的二进制日志文件路径:
SHOW VARIABLES LIKE 'log_bin_basename';
该变量的值就是二进制日志文件的基础路径,比如返回/var/lib/mysql/mysql-bin,那么实际的日志文件会是mysql-bin.000001、mysql-bin.000002这类命名格式。
2. 执行时间段解析命令
假设要解析2024-05-20 10:00:00到2024-05-20 12:00:00之间的操作,日志文件为/var/lib/mysql/mysql-bin.000003,执行命令如下:
mysqlbinlog --start-datetime="2024-05-20 10:00:00" --stop-datetime="2024-05-20 12:00:00" /var/lib/mysql/mysql-bin.000003
如果需要将解析结果保存到文件方便后续查看,可以追加输出重定向:
mysqlbinlog --start-datetime="2024-05-20 10:00:00" --stop-datetime="2024-05-20 12:00:00" /var/lib/mysql/mysql-bin.000003 > /tmp/binlog_parse_result.txt
3. 解析结果说明
解析后的内容包含如下核心部分:
- 每个操作的起始时间、执行线程ID
- 操作对应的服务器ID,用于主从复制场景区分来源
- 具体的SQL语句或者行变更记录,取决于二进制日志的格式(STATEMENT或ROW)
- 事务的开始和提交标记
如果是ROW格式的二进制日志,默认会显示行变更的基值和变更后的值,添加--base64-output=DECODE-ROWS -v参数可以将行变更转换为可读的伪SQL语句:
mysqlbinlog --start-datetime="2024-05-20 10:00:00" --stop-datetime="2024-05-20 12:00:00" --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000003
注意事项
- 时间参数的值需要和MySQL服务器的时区一致,否则会出现筛选偏差,建议先通过
SELECT NOW();确认服务器当前时间 - 如果二进制日志文件较多,不确定目标操作在哪个文件中,可以先通过
mysqlbinlog查看所有日志文件的大致时间范围,再定位到具体文件解析 - 解析操作不需要停止MySQL服务,但是频繁解析大文件可能会对服务器IO产生轻微影响,建议在业务低峰期执行
常见问题排查
如果执行命令后提示文件不存在,先确认日志文件路径是否正确,同时检查执行命令的用户是否有日志文件的读取权限。如果解析结果中没有目标时间段的内容,先确认时间范围是否写反,或者该时间段内确实没有数据库变更操作。
通过mysqlbinlog按时间段解析二进制日志,可以快速定位特定时间内的所有数据库操作,无论是排查异常数据变更,还是做增量数据恢复,都是非常实用的操作方式。
MySQL二进制日志mysqlbinlog时间段解析修改时间:2026-06-23 02:36:30