当前位置: 代码网 > it编程>数据库>Mysql > MySql Binlog的5种场景+实操步骤全解析

MySql Binlog的5种场景+实操步骤全解析

2026年02月04日 Mysql 我要评论
binlog(二进制日志)是 mysql 核心日志之一,记录数据库所有数据变更操作(增删改、表结构调整等),是数据恢复、主从复制、问题排查的关键工具。本文将详细拆解 基于位点、时间、gtid、指定数据

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.cnflog-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 输出详细行数据(含字段值),> 重定向到指定文件便于查看。
  1. 查看解析结果
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)。

  1. 解析指定 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 实例,仅需查看某一数据库的变更(如隔离业务库数据操作)

实操步骤:

  1. 生成多库测试数据(可选)
# 查看当前位点
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

  1. 解析指定数据库
# -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-gtidsmysql 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解析内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com