写点什么

mysql 经典 1 异步复制 after sync 和 after commit

作者:趁早
  • 2024-05-17
    浙江
  • 本文字数:456 字

    阅读完需:约 1 分钟

1. after_commit

提交流程:client-->execute sql-->wrtie redolog-->write binlog-->innodb storage commit-->wait ACK-->client receive OK。

2.after_sync

提交流程:client-->execute sql-->wrtie redolog-->write binlog-->wait ACK-->innodb storage commit-->client receive OK。

从提交流程可以看出,两个模式的区别就是提交到存储引擎与等待从库的 ACK 的顺序。

after_commit 模式先提交到存储引擎,那么主库上事务相当于已经完成了,虽然没有等到从库的 ACK,没有给客户端以事务成功的反馈,但是在连接主库的其他客户端上是能查询到主库修改的数据,此时发生故障,从库切主库时相当于丢失了数据。也就是说 after_commit 无法保证主从数据的强一致性。

after_sync 模式是主库先要等到从库的 ACK,然后再提交到存储引擎,在提交到存储引擎前,主从上都查不到事务的修改,此时发生故障切换,不算丢失数据,因为故障前的事务尚未完成。也就是说 after_sync 模式可以保证主从的强一致性。

因此推荐使用 after_sync 模式。

 

搭建主从半同步架构。

执行一个大事务,解析 binlog 来查看主从的同步状态。

用户头像

趁早

关注

但做好事,莫问前程 2017-12-12 加入

一位游离在互联网大中小厂的dber

评论

发布
暂无评论
mysql经典 1 异步复制after sync和after commit_趁早_InfoQ写作社区