MySql Binlog的5种场景+实操步骤全解析
Binlog(二进制日志)是 MySQL 核心日志之一,记录数据库所有数据变更操作(增删改、表结构调整等),是数据恢复、主从复制、问题排查的关键工具。本文将详细拆解 基于位点、时间、GTID、指定数据库、加密 Binlog 的 5 种解析方法,附完整命令与场景说明,新手也能直接上手。
一、基于位点解析(精准定位变更位置)
适用场景:已知数据变更发生的 Binlog 文件及大致位点(如主从同步中断时定位错误位点)
实操步骤:
- 查看当前 Binlog 状态
- 先确认当前正在写入的 Binlog 文件、当前位点及 GTID:
show master status\G
输出结果中:
File:当前 Binlog 文件名(如mysql-bin.00006)
Position:当前位点(如212,初始位点通常为 155)

生成测试 Binlog(可选)
若需验证解析效果,可执行测试操作生成变更记录:
-- 创建测试表并插入数据 create table martin.binlog_test(id int); insert into martin.binlog_test select 1;
再次执行 show master status\G,记录变更后的位点(如 763)。

- 执行 Binlog 解析
- 进入 Binlog 存储目录(路径与
my.cnf中log-bin配置一致),执行解析命令:
# 进入Binlog目录 cd /data/mysql/binlog/ # 解析命令:--start-position=起始位点 --stop-position=结束位点(可选) mysqlbinlog --start-position=212 --stop-position=763 mysql-bin.000006 -vv > /data/binlog_parse_01.sql
- 参数说明:
-vv输出详细行数据(含字段值),>重定向到指定文件便于查看。
- 查看解析结果
cat /data/binlog_parse_01.sql


二、基于时间解析(按时间范围筛选)
适用场景:已知数据变更的大致时间(如排查某时间段的数据异常)
核心命令:
# 解析指定时间后的数据(格式:YYYY-MM-DD HH:MM:SS) mysqlbinlog --start-datetime="2026-02-03 15:29:55" mysql-bin.000006 > /data/binlog_parse_02.sql # 解析时间区间内的数据(添加--stop-datetime) mysqlbinlog --start-datetime="2026-02-03 15:29:55" --stop-datetime="2026-02-03 15:33:48" mysql-bin.000006 > /data/binlog_parse_02_1.sql
注意:
- 时间格式需严格匹配,建议精确到分钟(秒级可选)。
- 若 Binlog 文件较多,可先用
mysqlbinlog --base64-output=decode-rows -v 文件名 | grep "时间关键词"快速定位目标文件。
三、基于 GTID 解析(精准定位单个事务)
适用场景:MySQL 8.0+ 版本,已开启 GTID(全局事务 ID),需精准定位单个事务(如主从复制中跳过错误事务)
实操步骤:
- 确认 GTID 状态
- 先确保 GTID 已开启,查看当前已执行的 GTID:
show master status\G
输出中 Executed_Gtid_Set 字段即为已执行的 GTID(格式:UUID:事务序号,如 dac2d0d1-d4cc-11f0-8896-000c295cba4b:1-94954)。

- 解析指定 GTID 的事务
mysqlbinlog --include-gtids 'dac2d0d1-d4cc-11f0-8896-000c295cba4b:1-94954' mysql-bin.000007 -vv > /data/binlog_parse_03.sql
- 参数说明:
--include-gtids指定需解析的 GTID(多个用逗号分隔),支持范围(如1-100)。
四、仅解析指定数据库的 Binlog
适用场景:多库共用一个 MySQL 实例,仅需查看某一数据库的变更(如隔离业务库数据操作)
实操步骤:
- 生成多库测试数据(可选)
# 查看当前位点 show master status\G -- 切换到maria库创建表 use maria; create table binlog_test_01(id int); -- 切换到test库创建表 use test; create table aaa(id int); -- 记录位点范围(起始:948,结束:1339) show master status\G

- 解析指定数据库
# -d 参数指定数据库名,限定位点范围 mysqlbinlog --start-position=2147 --stop-position=2540 -d maria mysql-bin.000012 -vv > /data/binlog_parse_04.sql
解析结果仅包含 martin 库的变更,test 库的操作会被过滤。

五、解析加密的 Binlog
适用场景:MySQL 开启 Binlog 加密存储(增强数据安全性),需通过服务认证解析(本地文件无法直接读取)
步骤 1:开启 Binlog 加密(前置配置)
# 1. 编辑MySQL配置文件 vim /data/mysql/conf/my.cnf # 2. 添加以下配置 early-plugin-load = keyring_file.so # 加载密钥插件 keyring_file_data = /data/mysql/keyring # 密钥存储路径 binlog_encryption = on # 开启加密 # 3. 重启MySQL服务 /etc/init.d/mysql.server restart # 4. 验证加密是否生效 show binary logs;

步骤 2:解析加密 Binlog
# 核心命令:--read-from-remote-server 从服务端读取(本地文件加密无法直接解析) mysqlbinlog --read-from-remote-server -uroot -p --start-position=212 --stop-position=548 mysql-bin.000007 -vv > /data/binlog_parse_05.sql
执行后输入 MySQL 密码,即可生成解密后的解析文件。

步骤 3:关闭 Binlog 加密(可选)
# 1. 编辑配置文件,删除加密相关配置 vim /data/mysql/conf/my.cnf # 删除以下行: # early-plugin-load = keyring_file.so # keyring_file_data = /data/mysql/keyring # binlog_encryption = on # 2. 备份旧加密Binlog(避免重启失败) mkdir /data/mysql/backup mv /data/mysql/binlog/* /data/mysql/backup/ # 3. 重启MySQL服务 /etc/init.d/mysql.server restart # 4. 验证关闭 show binary logs;

总结
| 解析方式 | 核心参数 | 适用场景 |
|---|---|---|
| 基于位点 | –start-position/–stop-position | 已知变更位点 |
| 基于时间 | –start-datetime/–stop-datetime | 已知变更时间 |
| 基于 GTID | –include-gtids | MySQL 8.0+ 精准定位事务 |
| 指定数据库 | -d 数据库名 | 多库隔离,仅需某库变更 |
| 加密 Binlog | –read-from-remote-server | 开启 Binlog 加密的场景 |
注意事项:
- 解析时需确保
mysqlbinlog工具版本与 MySQL 服务器版本一致(避免兼容性问题)。 - 敏感环境中,解析结果文件需做好权限控制(如
chmod 600),防止数据泄露。 - 若需恢复数据,可直接执行解析后的 SQL 文件(
mysql -uroot -p xxx.sql)。
如果遇到解析失败、位点定位不准等问题,欢迎在评论区交流~ 后续将更新 Binlog 日志清理、主从复制实战等内容,记得关注!
到此这篇关于MySql Binlog的5种场景+实操步骤全解析的文章就介绍到这了,更多相关mysql binlog解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
mysql时间戳格式化函数from_unixtime使用的简单说明
mysql中的FROM_UNIXTIME函数可以数据库中整型类的时间戳格式化为字符串的日期时间格式,下面这篇文章主要给大家介绍了关于mysql时间戳格式化函数from_unixtime使用的简单说明,需要的朋友可以参考下2022-08-08
MySQL函数sysdate()与now()的区别测试用例对比
这篇文章主要为大家介绍了MySQL函数sysdate()与now()的区别测试用例对比详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-12-12
CenOS6.7下mysql 8.0.22 安装配置方法图文教程
这篇文章主要为大家详细介绍了CenOS6.7下mysql 8.0.22 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2020-11-11


最新评论