正常流程
1 在图中(1) 完成binlog 写入文件的pageCache
2 在图中(2) 完成binlog sync 的磁盘binlog 文件
3 在图中(3) 完成binlog 的异步发送,把binlog 发送到备库(等待sync完成,更新binlog updte pos,sync_binlog=1的流程)
4 在图中(4) 完成binlog 发送完成的确认信息(此处可以完全确认binlog已经发送到从库)
5 在图中(5) 用户线程被激活,完成第三阶段的事务提交
异常流程分析
1 在图中(1)完成,还未开始图中(2)时宕机,从库肯定没有当前事务,主库不确定是否有。
因写入pageCache的数据,不做sync操作有可能被操作系统做sync操作,导致当前的
Binlog 已经sync到磁盘。
2 在图中(2)完成,还未开始图中(3)(或者当前事务的binlog还未完整的发送到从库
即图中(3)进行了一半)宕机,主库有,从库没有。
3 在图中(3)完成后,还未开始图中(5)宕机,主库肯定有,从库肯定有
- | 宕机点 | 宕机点 | 主库 | 从库 |
---|---|---|---|---|
1 | (1)完成 | (2)未开始 | 不确定 | 无 |
2 | (2)完成 | (3)未开始或 完成一半 | 有 | 无 |
3 | (3)完成 | 4完成或者未完成 | 有 | 有 |