redolog 两阶段提交:
目前处理流程 1,先写redo的prepare.2.写binlog 3.写redo的commit.
单次提交 1.写redolog 的commit 2.写binglog
a;
如果第一次写redolog前 服务重启,那么重启后根据redo恢复事务继续执行,两种方案都不影响。
b:
如果第一次写入redolog后,服务重启。
第一种方案(两阶段提交): 恢复事务,发现事务prepare,但是binlog写没写不知道,所以需要去binlog中根据事务id去check是否完成了binlog,然后决定是否写入Binlog。
第二种方案:恢复事务,发现已经commit了。(但是commit的事务太多了,难道要从头(checkpoint)开始恢复?),然后检查事务的binlog是否写入,然后决定是否写入Binlog。
c:
如果binglog写入了一半,然后重启了。
第一种方案:恢复事务后,在检查binlog日志时,需要支持完整性检测,或则能支持幂等写入,或则从库幂等执行。断点续写binlog,或则重写完整的binlog
第二种方案:检查过程同上。
所以redolog两阶段提交,只是为了恢复事务时,缩小恢复的范围.并不是用来保证binlog的写入。