mysql的两阶段提交最详细讲解

首先我们要知道mysql中日志,redo log,bin log 这个日志。
在执行更新语句过程,会记录redo log与binlog两块日志,以基本的事务为单位,redo log在事务执行过程中可以不断写入,而binlog只有在提交事务时才写入,所以redo log与binlog的 写入时机 不一样。

两阶段提交是基于redo log,bin log

在这里插入图片描述

redo log与binlog两份日志之间的逻辑不一致,会出现什么问题?

在这里插入图片描述
由于binlog没写完就异常,这时候binlog里面没有对应的修改记录。
在这里插入图片描述
为了解决两份日志之间的逻辑一致问题,InnoDB存储引擎使用两阶段提交方案。
在这里插入图片描述
使用两阶段提交后,写入binlog时发生异常也不会有影响
在这里插入图片描述
另一个场景,redo log设置commit阶段发生异常,那会不会回滚事务呢?
在这里插入图片描述
并不会回滚事务,它会执行上图框住的逻辑,虽然redo log是处于prepare阶段,但是能通过事务id找到对应的binlog日志,所以MySQL认为是完整的,就会提交事务恢复数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值