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

来源:这里教程网 时间:2026-03-31 12:12:21 作者:
一、MySQL 5.7 Binlog 核心特性二、3 种格式在 5.7 中的表现三、ROW 模式 Binlog 结构(最重要)四、mysqlbinlog 解析命令(5.7 专用)1. 基础解析(能看懂行数据)2. 详细解析(最常用)3. 按时间 / 位置解析五、ROW 格式解析实战(一看就懂)示例 SQL解析后关键内容(精简版字段含义六、三种操作的 Binlog 表现1. INSERT(只有后镜像)2. UPDATE(前 + 后镜像)3. DELETE(只有前镜像)七、MySQL 5.7 Binlog 关键配置(my.cnf)八、常见问题1. 解析出来是乱码?2. 看不到字段名?3. 批量更新日志很大?总结(最核心)

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

一、MySQL 5.7 Binlog 核心特性

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

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

表格

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

查看当前格式:

show variables like 'binlog_format';

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

一个完整的 binlog 事件包含:

    事件头:时间、位置、语句类型表映射:库名、表名、字段结构行数据前镜像(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 模式会记录每一行,正常现象。

总结(最核心)

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

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

相关推荐

热文推荐