Mysql 做的redoLog两阶段提交的意义

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的写入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值