-
两阶段提交
-
将redo log拆分成两个阶段,一个是准备阶段,一个是提交阶段
-
如果在写入redo log之前宕机,那么redo log和bin log中并没有任何数据
-
如果在写入redo log之后宕机,这时通过事务id并不能在bin log中找到对应的记录,也就意味着并没有写入bin log,所以会执行回滚操作,这是为了保证主机和从机的数据一致
-
如果在写入bin log后宕机,这时redo log写入完成处于prepare,binlog也写入完成,这时候检査 binlog 中的数据否存在并且完整,如果存在且完整,则直接提交事务,如果不存在或者不完整,则回滚事务
-
两阶段提交: redolog记录完后将数据状态标记为prepare,接着开始写binlog日志,写完binlog日志后,将redolog日志数据状态修改为commit
-
-
解决的问题
-
主从数据不一致的问题
-
刷盘时redo log刷盘成功记录到了磁盘上,而binlog在刷盘时,发生宕机导致binlog并没有刷盘成功,因为redolog已经刷盘成功了数据实现了持久化,但是当从机去访问主机的bin log时,这时binlog中的数据并没有修改,因为宕机导致刷盘失败,所以binlog中的数据是错误的,然后从机同步数据后,将错误的数据同步到磁盘中,这时主机和从机的数据不一致
-
-