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

 更新时间:2026年02月04日 11:02:24   作者:·云扬·  
本文详细介绍了5种解析MySQL Binlog的方法,包括基于位点、时间、GTID、指定数据库和加密Binlog的解析,附带完整命令与场景说明,适合新手上手,每种方法都有具体适用场景和实操步骤,感兴趣的朋友跟随小编一起看看吧

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解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql存储过程原理与使用方法详解

    mysql存储过程原理与使用方法详解

    这篇文章主要介绍了mysql存储过程原理与使用方法,结合实例形式详细分析了mysql存储过程的优缺点、定义、调用方法及相关操作注意事项,需要的朋友可以参考下
    2019-12-12
  • mysql时间戳格式化函数from_unixtime使用的简单说明

    mysql时间戳格式化函数from_unixtime使用的简单说明

    mysql中的FROM_UNIXTIME函数可以数据库中整型类的时间戳格式化为字符串的日期时间格式,下面这篇文章主要给大家介绍了关于mysql时间戳格式化函数from_unixtime使用的简单说明,需要的朋友可以参考下
    2022-08-08
  • mysql 时间戳的用法

    mysql 时间戳的用法

    这篇文章主要介绍了mysql 时间戳的用法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 窥探mysql存储过程细节

    窥探mysql存储过程细节

    这篇文章主要为大家详细介绍了mysql存储过程细节,对mysql存储过程感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Linux下MySQL 5.6.27 安装教程

    Linux下MySQL 5.6.27 安装教程

    这篇文章主要为大家详细介绍了Linux下MySQL 5.6.27 安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Mysql主从复制部署过程解读

    Mysql主从复制部署过程解读

    MySQL主从复制通过GTID实现主数据库变更同步到从数据库,适用于读写分离、高可用性和数据备份,配置步骤包括环境准备、主从服务器配置、其他配置等
    2026-01-01
  • MySQL函数sysdate()与now()的区别测试用例对比

    MySQL函数sysdate()与now()的区别测试用例对比

    这篇文章主要为大家介绍了MySQL函数sysdate()与now()的区别测试用例对比详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • MySQL安装与创建用户操作(新手入门指南)

    MySQL安装与创建用户操作(新手入门指南)

    这篇文章主要为大家介绍了MySQL安装与创建用户的使用讲解是非常适合小白新手的入门学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • CenOS6.7下mysql 8.0.22 安装配置方法图文教程

    CenOS6.7下mysql 8.0.22 安装配置方法图文教程

    这篇文章主要为大家详细介绍了CenOS6.7下mysql 8.0.22 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • mysql中ALTER AGGREGATE使用场景小结

    mysql中ALTER AGGREGATE使用场景小结

    ALTER AGGREGATE 是 SQL 中用于修改已定义聚合函数的语法,本文主要介绍了mysql中ALTER AGGREGATE使用场景小结,具有一定的的参考价值,感兴趣的可以了解一下
    2025-05-05

最新评论