问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MySQL Binlog 日志的三种格式详解

创作时间:
作者:
@小白创作中心

MySQL Binlog 日志的三种格式详解

引用
CSDN
1.
https://blog.csdn.net/qq_29752857/article/details/136728483

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

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

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

优点

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

缺点

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

Row(基于行的复制,RBR)

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

优点

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

缺点

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

Mixed(混合模式复制,MBR)

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

特点

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

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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号