mysql 的 binlog 原理

binlog的作用:

  1. 数据恢复: 如果mysql的数据丢失了,又没有备份数据的情况下可以使用binlog进行恢复
  2. 主从复制: 主从数据库保持数据一致性的方式就是binlog日志的复制,从数据库复制主数据库的binlog
  3. 数据监控: 可以监控 mysql 数据的变化

mysql 的 binlog 这么有用那么他是如何工作的呢?

binlog的三种格式

binlog 有三种不同的格式:

Statement-Based Replication (SBR):

记录的是 每一条 SQL 语句。

  • 也就是说,当执行一个 INSERT、UPDATE 或 DELETE 等操作时,SBR 会将这些 SQL 语句直接记录到 binlog 中,而不关注数据的具体变化。

优点:日志文件较小,性能较好。
缺点:容易结果不一致.
如果 SQL 语句包含非确定性操作(如 NOW()、RAND() 等函数),或者执行的 SQL 语句在主从服务器的执行环境不同(比如时区、字符集不同),可能会导致主从数据不一致。

Row-Based Replication (RBR):

记录的是 每一行数据的变化。即对于每个 UPDATE、INSERT 或 DELETE 操作,RBR 会将数据的每一行变动(比如更新了哪些字段,插入了哪些新记录,删除了哪些记录)详细记录下来,而不是记录 SQL 语句本身。
优点:可以确保主从数据的一致性,因为它关注的是数据的具体变化。
缺点:日志文件会比 SBR 更大,且性能开销较高,特别是在大规模的数据变更时。

思考1:为什么 rbr 比 sbr 大?大多少?

Mixed-Based Replication (MBR):

混合模式:MySQL 会根据情况智能选择使用 SBR 或 RBR。
默认情况下,简单的 SQL 语句(如没有非确定性函数的 INSERT、UPDATE 等)会使用 SBR。
如果 SQL 语句中包含非确定性函数(如 NOW()、RAND() 等),或者可能导致主从不一致的操作,MySQL 会自动切换到 RBR 来记录这些操作。
优点:灵活,能够根据不同情况在 SBR 和 RBR 之间切换,平衡性能和一致性。
缺点:虽然它自动选择最合适的日志格式,但可能会导致日志格式的不一致,从而使得调试和排查问题时变得更加复杂。

总结:

  • SBR(语句级): 是记录执行的 SQL 语句,适用于简单且没有复杂操作的场景。

  • RBR(行级): 是记录数据变动的每一行,适用于确保数据一致性要求更高的场景。

  • MBR(混合模式): 是 默认使用 SBR,只有在遇到非确定性操作(如 NOW()、RAND())或者可能导致主从不一致的操作时才会使用 RBR。

如何选择:

最好使用 混合模式(mbr),既可以避免数据不一致的问题,又可以避免二进制文件过大的问题

如何配置binlog?

修改 MySQL 中的配置文件(my.cnf 或 my.ini):
添加:

[mysqld]
binlog_format = MIXED ##这里是混合模式,如果要更换其他模式要改一下模式

参考:
https://segmentfault.com/a/1190000039132951
https://www.cnblogs.com/ryanzheng/p/17472224.html
https://cloud.tencent.com/developer/article/1444390

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值