当前位置: 首页 > news >正文

MySQL Binlog 格式对比

# MySQL Binlog 格式对比

Binlog 是 MySQL 复制和数据恢复的核心。三种格式各有优劣,选错了会影响数据一致性。

三种格式

-- 查看当前格式SHOWVARIABLESLIKE'binlog_format';-- 三种值:-- STATEMENT(SBR)-- ROW(RBR)-- MIXED(MBR)

STATEMENT 格式(SBR)

-- 记录原始 SQL 语句-- Binlog 内容:INSERTINTOuser(id,name)VALUES(1,'Tom');UPDATEaccountSETbalance=balance+100WHEREid=1;

优点

- 日志量小(只存 SQL) - 节省磁盘空间 - 主从延迟相对小

缺点

-- 不确定函数在主从结果不一致INSERTINTOlog(created_at)VALUES(NOW());-- 主库 NOW() = 2024-01-01 12:00:00-- 从库延迟 5 秒执行,NOW() = 2024-01-01 12:00:05-- 主从数据不一致!-- 其他问题:-- LIMIT 不带 ORDER BY-- 存储过程/触发器-- UUID() 等不确定函数

ROW 格式(RBR)

-- 记录行变化(修改前 + 修改后)-- Binlog 内容:-- ### UPDATE `account`-- ### WHERE-- ### @1=1 (id)-- ### @2=500 (balance 修改前)-- ### SET-- ### @1=1-- ### @2=600 (balance 修改后)

优点

- 数据一致性最好(记录实际变化) - 不会受不确定函数影响 - 安全可靠

缺点

- 日志量大(大事务尤其明显) -- DELETE 100万条,ROW 格式要记录 100 万行的变化 -- STATEMENT 只记录一条 SQL - 无法从 binlog 直接看到 SQL(需要 mysqlbinlog --base64-output=DECODE-ROWS -v)

MIXED 格式(MBR)

MySQL 自动选择: - 一般情况用 STATEMENT(日志小) - 遇到不确定函数自动切换 ROW 是 STATEMENT 和 ROW 的折中方案

自动切换到 ROW 的情况

-- 包含 NOW()、UUID() 等函数-- 包含 LIMIT 没有 ORDER BY-- 使用存储过程/触发器/自定义函数-- UPDATE 中使用了不确定表达式

如何选择?

场景推荐格式
主从复制ROW(推荐)
数据恢复ROW
日志审计STATEMENT(可读性好)
磁盘空间有限STATEMENT
折中方案MIXED

结论:新项目一律用 ROW,数据一致性最重要。

查看 Binlog 内容

# STATEMENT 格式mysqlbinlog /var/lib/mysql/mysql-bin.000001# ROW 格式(需要解码)mysqlbinlog --base64-output=DECODE-ROWS-v/var/lib/mysql/mysql-bin.000001# 按时间范围mysqlbinlog --start-datetime='2024-01-01 00:00:00'--stop-datetime='2024-01-02 00:00:00'/var/lib/mysql/mysql-bin.000001# 按数据库过滤mysqlbinlog--database=mydb /var/lib/mysql/mysql-bin.000001

Binlog 清理

-- 自动清理:保留 7 天SETGLOBALexpire_logs_days=7;-- 手动清理PURGEBINARYLOGS BEFORE'2024-01-01 00:00:00';PURGEBINARYLOGSTO'mysql-bin.000010';-- 查看当前 binlogSHOWBINARYLOGS;

小结

格式一致性日志大小可读性推荐
STATEMENT不推荐
ROW推荐
MIXED折中

相关阅读:

  • [MySQL 主从复制原理]
  • [MySQL GTID 模式详解]
  • [MySQL 数据备份与恢复]
http://www.jsqmd.com/news/857828/

相关文章:

  • 从零开始搭建一个基于Taotoken多模型支持的对话应用
  • AICoverGen实战指南:5步掌握AI翻唱制作的核心技术
  • ARM SVE向量减法指令详解与应用优化
  • Camunda流程版本管理避坑指南:从Version Tag查询到迁移验证,这些细节决定成败
  • Qt样式表(QSS)实战:手把手教你解决QRadioButton和QCheckBox布局错位的那些坑
  • 重新定义怀旧体验:揭秘Bilibili-Old项目的架构哲学与实战价值
  • Super IO:Blender批量导入导出的终极解决方案,告别繁琐文件操作!
  • Midjourney洛可可风格提示词工程(2024权威白皮书版):含12组经AIGC艺术展验证的高通过率prompt模板
  • Linux驱动开发实战:为I.MX6ULL编写一个DS18B20的字符设备驱动(从设备树到应用测试)
  • 5分钟掌握DistroAV:告别复杂布线,用网络视频传输重塑你的OBS直播工作流
  • UE5 VSCode头文件跳转失效的根因与解决方案
  • DDrawCompat完整指南:3步实现Windows 11完美运行经典游戏的实用解决方案
  • Steam Economy Enhancer终极指南:如何快速提升Steam市场交易效率
  • 新一代大文件管理系统 网盘系统源码
  • 告别臃肿IDE:用w64devkit在Windows上打造一个极简C/C++开发环境(附OpenCV配置)
  • 5分钟快速激活Adobe全系列软件的终极指南:Adobe-GenP工具详解
  • UE5 VSCode头文件跳转失效的终极解决方案
  • Gophish钓鱼页面制作指南:从克隆腾讯企业邮箱到数据收集
  • 蓝牙5.0广播包PDU字段逐行解读:从ADV_IND到AUX_CHAIN_IND,新手也能看懂的报文拆解
  • 从防御者视角看TCP攻击:SYN Cookie、队列策略与Wireshark抓包分析实战
  • 在STM32上玩转C++:用IAR和类封装重构你的硬件驱动(附工程源码)
  • 2026 苏州科创企业资质办理服务商口碑榜单:高新 / 专精特新 / 绿色工厂申报靠谱机构优选 - 海棠依旧大
  • 办公效率翻倍!OpenClaw AI 数字员工实操教程
  • 终极密码恢复指南:3步轻松找回遗忘的压缩包密码
  • 从‘找不同’到异常检测:拆解RegAD论文里的空间变换网络(STN)与SimSiam
  • 为Hermes Agent配置自定义Provider并指向Taotoken聚合服务
  • 番茄小说永久保存神器:5分钟打造个人数字图书馆
  • Hotkey Detective:3分钟找出Windows热键冲突元凶,重获键盘控制权
  • 2026工业铝型材深加工公司观察:交付响应与一体化链路横评 - 企师傅推荐官
  • 2026 年库尔勒壁挂炉销售维修全攻略:选购、安装、维保、避坑一站式指南 - GrowthUME