为什么会有两阶段提交协议?
- redo log一般比binlog先刷新到缓冲区当中,而且redolog有个后台持久化线程,每秒执行一次;
- 当binlog持久化失败, 但是redolog持久化成功时,会出现两个日志文件不一致的情况。
- 两阶段协议将redo log设置为prepare和submit这两种状态来解决问题
两阶段协议的具体描述
1. 会将redolog中正在运行的事物标记为prepare状态、
2. 在事务submit后会将相关事物的状态有prepare修改为submit状态
- 在数据恢复的时候,检查redolog中事物的状态。
- 如果是submit直接恢复;
- 如果是prepare状态,就会去检查binlog中是否有相关事物的记录,如果有就直接恢复;如果没有就回滚事物,删除这个事物。