MySQL崩溃后的恢复

MySQL写数据是先写redo,然后写buffer,最后再落盘的。这就意味着需要一些机制恢复到系统崩溃前的状态。

这里讨论几个场景:

系统崩溃前,没有未提交的事务,数据也落盘了:

        不需要恢复(话虽如此,该走的流程还是得走)

事务提交后系统崩溃,数据未落盘:

        我们希望系统可以恢复到事务提交后的状态。我们知道,一般情况下,事务提交时,redo log buffer会强制刷盘。所以系统崩溃后,系统可以通过redo log恢复系统到崩溃前的状态,从而保证了事务持久性。

事务未提交,系统崩溃:

        这种情况下,意味着事务失败,我们希望系统可以恢复到事务开始前的状态。但是有可能部分redo log已经落盘了,此时如果通过redo log恢复系统,则会造成出现脏数据的现象。这时就需要undo log发挥作用了。系统会从undo log中找到当前为active的事务ID,即未提交的事务id,把这些事务对应的改动全部回滚掉,从而保证了事务的原子性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值