声明:本文章内容是根据极客时间中林晓斌的课程《MYSQL45讲》,经过学习,加以自己的理解形成的笔记。具体原文可以到官网进行阅读。如有侵权请,告知删除。

1.MySQL发生异常重启

我们知道,mysql 是支持crash-save的,他依靠的机制是 binlog(归档日志)和redo log(重做日志),依靠两阶提交,保证数据日志的一致性。
MySQL学习笔记之日志相关问题(十五)

1.1时刻A 发生异生常重启

重启之后,发现并没有写 binlog.加上redo log 还没有commit ,那么会重启之后会发生回滚。

1.2时刻B 发生重启

1.如果 redo log 里面的事务是完整的,也就是已经有了 commit 标识,则直接提交;
2.如果 redo log 里面的事务只有完整的 prepare,则判断对应的事务 binlog 是否存在并完整:

  • a. 如果是,则提交事务;
  • b. 否则,回滚事务。

2:redo log 和 binlog 是怎么关联起来的?

他们之间有一个共同的数据字段,叫做XID。崩溃恢复的时候,扫描redo log:

  • 如果是既 prepare 又commit的redo log ,就直接提交
  • 如果只有parepare,但是没有 commit的redo log,就拿着XID去binlog找对应的事务

相关文章:

  • 2021-12-04
  • 2022-02-02
  • 2021-08-04
  • 2021-08-24
  • 2021-09-23
  • 2021-07-25
  • 2021-07-23
  • 2022-12-23
猜你喜欢
  • 2021-05-19
  • 2022-02-23
  • 2021-05-26
  • 2021-10-25
  • 2021-04-17
  • 2021-08-16
  • 2022-01-12
相关资源
相似解决方案