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

MySQL Binlog 日志的三种格式详解

MySQL的binlog日志是数据库实现主从复制、数据恢复等功能的重要工具,它提供了三种不同的记录格式,分别为Statement、Row和Mixed格式。

1. Statement(基于SQL语句的复制,SBR)

Statement格式的binlog会记录每一项更改数据的SQL语句本身。这意味着每当主库上执行了一个数据修改操作,其对应的SQL语句就会被完整地记录在binlog中。

优点

  • 记录的内容相对简洁,不包含每一行具体的变化细节,因此可以减少binlog日志的大小,节省磁盘IO,提升性能。

缺点

  • 由于仅仅记录了SQL语句,为了在备库上精确重现主库的执行效果,还需要记录诸如session变量、用户定义变量等相关上下文信息,以防备库因环境差异而导致执行结果不同。
  • 对于涉及特定存储过程、函数、触发器调用的情况,可能无法确保复制的一致性。

2. Row(基于行的复制,RBR)

Row格式的binlog不再记录SQL语句,而是直接记录数据行级别的更改详情。

优点

  • 明确记录了每一行数据的修改细节,能精确反映数据变化,避免了SBR中可能出现的复制一致性问题。
  • 即使在主从服务器的表结构稍有差异或者存在触发器、函数等情况,也能确保复制的正确性。

缺点

  • 由于需要记录每一行的具体修改,可能导致binlog日志量增大,占用更多存储空间,增加网络传输负担。

3. Mixed(混合模式复制,MBR)

Mixed格式则是对前两种格式的综合运用,MySQL会智能地根据执行的具体SQL语句选择合适的日志记录方式。

特点

  • 对于大多数常规SQL语句,MySQL会选择使用Statement格式记录binlog,以减少日志量。
  • 当遇到那些在备库上直接执行原始SQL语句无法达到与主库相同效果的情况,如涉及不确定性的函数、存储过程、触发器等,MySQL会自动切换到Row格式,确保复制的准确性。

通过灵活运用Mixed格式,MySQL既能尽量减小binlog日志大小,又能最大程度地保障主从复制的一致性。


http://www.kler.cn/a/271724.html

相关文章:

  • NLP深度学习 DAY5:Seq2Seq 模型详解
  • qt内部的特殊技巧【QT】
  • Git图形化工具【lazygit】
  • 指针的介绍3后
  • 7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)
  • 【机器学习】自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • python--剑指offer--15. 二进制中1的个数
  • 网络学习:IPV6地址详解
  • 『scrapy爬虫』05. 使用管道将数据写入mysql(详细注释步骤)
  • Jenkins: 配合docker来部署项目
  • 【前端】CSS常见的选择器
  • JAVA初阶数据结构栈(工程文件后续会上传)(+专栏数据结构练习是完整版)
  • 【设计模式】Java 设计模式之装饰者模式(Decorator)
  • 浅谈C/C++的常量const、指针和引用问题
  • 用Stable Diffusion生成同角色不同pose的人脸
  • C#使用SharpZipLib对文件进行压缩和解压
  • NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Search)
  • venv uvicorn python 虚拟服务器外网无法访问
  • swagger踩坑之请求类不显示具体字段
  • Redis + Caffeine = 王炸!!
  • Spring项目-前端问题:Can‘t find variable:$
  • 通用的springboot web jar包执行脚本,释放端口并执行jar包
  • PHP修改默认上传文件缓存位置
  • PC-DARTS: PARTIAL CHANNEL CONNECTIONS FOR MEMORY-EFFICIENT ARCHITECTURE SEARCH
  • HamonyOS进度条通知