首页/数据/数据工程与 ETL 速查/binlog 三种格式:ROW/STATEMENT/MIXED
本包目录(311 条)
管道基础52 条Kafka64 条调度与编排40 条数仓建模52 条数据质量50 条
CDC 与同步53 条

binlog 三种格式:ROW/STATEMENT/MIXED

MySQL binlog 支持三种格式:STATEMENT 记 SQL 语句、ROW 记每行前后镜像、MIXED 按语句自动选择。CDC 必须使用 ROW,只有行级镜像才能稳定还原增删改数据;语句级日志里 NOW()、UUID() 等非确定函数会导致回放与解析不一致。

三种格式对比

格式记录内容适用注意
ROW每行变更的前后镜像CDC、可靠复制日志体积相对较大
STATEMENT原始 SQL 语句简单场景、日志体积小非确定函数不一致,更新/删除难以还原
MIXED按语句自动选择兼顾体积的通用场景对 CDC 不可靠,不应使用

会话级查看与切换

会话级查看与切换
-- 查看当前格式
SHOW VARIABLES LIKE 'binlog_format';
-- 会话级临时切换(需要相应权限)
SET SESSION binlog_format = 'ROW';
CDC 场景应在实例级把 binlog_format 固定为 ROW 并纳入参数基线,避免后续被误改。

易错点

  • 只改了当前会话的 binlog_format,其它连接产生的日志依然是 STATEMENT,采集到的事件时有时无
  • 用 MIXED 跑 CDC,遇到函数、存储过程写入时解析结果与源数据不一致

数据来源与参考

  • MySQL 8.0 Reference Manual: Binary Logging Formats
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌