MySQL中Binlog的完整格式解析(ROW 模式,默认)

 更新时间:2026年03月31日 09:22:18   作者:qq_28372005  
本文介绍了MySQL 5.7中ROW格式的binlog的特性、解析方法和实战案例,包括MySQL 5.7的binlog核心特性、ROW格式binlog结构、解析命令、常见问题及解决方法等内容,需要的朋友可以参考下

MySQL 5.7 默认 binlog 格式是 ROW(行模式),这是生产环境最常用、最稳定的格式。我给你一份可直接落地使用的解析指南,包含格式结构、解析命令、字段含义、实战案例。

一、MySQL 5.7 Binlog 核心特性

  1. 默认格式ROW(行模式)
  2. 记录内容:不存 SQL,只存行数据变更的前后镜像
  3. 主从复制:绝对一致,无函数 / 存储过程偏差
  4. 支持:数据恢复、闪回、CDC 同步(Canal/Debezium)
  5. binlog 文件:二进制文件,必须用 mysqlbinlog 解析

二、3 种格式在 5.7 中的表现

表格

格式说明5.7 是否推荐
ROW(默认)记录行变更✅ 强烈推荐
STATEMENT记录原始 SQL❌ 不推荐(主从不一致)
MIXED自动切换⚠️ 一般不使用

查看当前格式:

show variables like 'binlog_format'; 

三、ROW 模式 Binlog 结构(最重要)

一个完整的 binlog 事件包含:

  1. 事件头:时间、位置、语句类型
  2. 表映射:库名、表名、字段结构
  3. 行数据
    • 前镜像(before):变更前的数据(UPDATE/DELETE)
    • 后镜像(after):变更后的数据(INSERT/UPDATE)

四、mysqlbinlog 解析命令(5.7 专用)

1. 基础解析(能看懂行数据)

mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin.000001 

2. 详细解析(最常用)

mysqlbinlog -vv --base64-output=DECODE-ROWS mysql-bin.000001 
  • -v:简单解析行
  • -vv:显示字段名 + 类型 + 值(生产必备)

3. 按时间 / 位置解析

# 按位置
mysqlbinlog --start-position=107 --stop-position=1000 -vv mysql-bin.000001
# 按时间
mysqlbinlog --start-datetime="2026-03-28 10:00:00" --stop-datetime="2026-03-28 11:00:00" mysql-bin.000001

五、ROW 格式解析实战(一看就懂)

示例 SQL

update user set age=26 where id=1; 

解析后关键内容(精简版

字段含义

  • @1:第 1 列
  • @2:第 2 列
  • WHERE前镜像(原数据)
  • SET后镜像(新数据)

六、三种操作的 Binlog 表现

1. INSERT(只有后镜像)

### INSERT INTO `test`.`user`
### SET
###   @1=2
###   @2='李四'
###   @3=20

2. UPDATE(前 + 后镜像)

plaintext

### UPDATE
### WHERE(原数据)
### SET(新数据)

3. DELETE(只有前镜像)

### DELETE FROM `test`.`user`
### WHERE
###   @1=1
###   @2='张三'
###   @3=26

七、MySQL 5.7 Binlog 关键配置(my.cnf)

server-id = 1
log_bin = mysql-bin
binlog_format = ROW        # 5.7 默认
expire_logs_days = 7      # 自动清理
binlog_row_image = full   # 默认:记录全部字段(推荐)
  • binlog_row_image=full:记录所有列(恢复最安全)
  • minimal:只记录修改列(省空间,但恢复麻烦)

八、常见问题

1. 解析出来是乱码?

必须加:

--base64-output=DECODE-ROWS -vv 

2. 看不到字段名?

-vv 而不是 -v

3. 批量更新日志很大?

ROW 模式会记录每一行,正常现象。

总结(最核心)

  1. MySQL 5.7 默认 binlog = ROW 行模式
  2. 记录:行数据前后镜像
  3. 解析命令mysqlbinlog -vv --base64-output=DECODE-ROWS
  4. 结构:事件头 → 表信息 → 前镜像 (WHERE) → 后镜像 (SET)
  5. 用途:主从复制、数据恢复、CDC 同步

以上就是MySQL中Binlog的完整格式解析(ROW 模式,默认)的详细内容,更多关于MySQL Binlog完整格式的资料请关注脚本之家其它相关文章!

相关文章

  • MySQL9.1.0实现GTID模式的项目实践

    MySQL9.1.0实现GTID模式的项目实践

    本文主要介绍了在MySQL 9.1.0中实现GTID模式的主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 解决MySQL中IN子查询会导致无法使用索引问题

    解决MySQL中IN子查询会导致无法使用索引问题

    这篇文章主要介绍了MySQL中IN子查询会导致无法使用索引问题,文章给大家介绍了两种子查询的写法,需要的朋友可以参考下
    2017-06-06
  • MySQL中ON DUPLICATE KEY UPDATE语句的使用

    MySQL中ON DUPLICATE KEY UPDATE语句的使用

    INSERT INTO ... ON DUPLICATE KEY UPDATE 是一个强大的SQL语句,它结合了插入新记录和更新已存在记录的功能于一体,本文就来介绍一下MySQL中ON DUPLICATE KEY UPDATE语句的使用,感兴趣的可以了解一下
    2024-08-08
  • MySQL为时间字段设置默认当前时间的方法技巧

    MySQL为时间字段设置默认当前时间的方法技巧

    文章详细介绍了MySQL中记录创建时间和最后修改时间的最佳实践,包括时间类型的支持、默认值函数的使用、MySQL版本的演进、常见错误的修复以及高级技巧,建议使用DATETIME或TIMESTAMP类型,并在DEFAULT子句中使用CURRENT_TIMESTAMP函数,需要的朋友可以参考下
    2026-02-02
  • MySQL如何对数据进行排序图文详解

    MySQL如何对数据进行排序图文详解

    我们知道从MySQL表中使用SQL SELECT语句来读取数据,下面这篇文章主要给大家介绍了关于MySQL如何对数据进行排序的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • mysql 模糊搜索的方法介绍

    mysql 模糊搜索的方法介绍

    本文将提供两种方法,第一种最土的方法:使用like语句第二种用全文索引,接下来将为你详细介绍
    2012-11-11
  • SQL INSERT及批量的几种方式总结

    SQL INSERT及批量的几种方式总结

    SQL提供了INSERT语句,用于将一行或多行插入表中,下面这篇文章主要给大家介绍了关于SQL INSERT及批量的几种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • mysql触发器之创建多个触发器操作实例分析

    mysql触发器之创建多个触发器操作实例分析

    这篇文章主要介绍了mysql触发器之创建多个触发器操作,结合实例形式分析了mysql创建及使用多个触发器的相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • mysql 数据库安装经验问题汇总

    mysql 数据库安装经验问题汇总

    这篇文章主要介绍了mysql 数据库安装经验问题汇总,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • 解决MySQL无法远程连接的方法

    解决MySQL无法远程连接的方法

    这篇文章主要介绍了解决MySQL无法远程连接的方法,文中给出的解决方案主要针对IP限制时出现的该种情况,需要的朋友可以参考下
    2015-04-04

最新评论