mysql宕机恢复原理

异常故障恢复

并行复制总是存在一个不可避免的问题,那就是在从库并行执行的过程中,如果数据库或操作系统挂了,那么此时每个线程执行的点就都是不确定的。也就是说顺序的binlog被分发出去了之后,从最小位置到最大位置之间这块连续的内容之间存在断点的。如此一来,从库恢复之后,开始执行时就需要准确无误地还原哪些已经执行,哪些还没有执行。

一个正在并行执行的事物队列,也可以说这些事务的last_committed都是相同的,并且从前到后。此外sequence_number是顺序增长的,也就是说以binlog文件内容的顺序排列的。

整个队列被分配之后,在某一时刻,队列执行的状态,假设从库挂了,,那么在次启动之后,如何继续执行?

mysql为了实现对执行状态的记录,做了很多工作,首先就是维护一个队列,这个队列叫做GAQ,group assigned queue,SQL线程在分配某一个事务时,首先会将这个事物加入到这个队列,之后系统会将当前事物分发到一个线程来执行。可以想到,在某一个时刻,任务队列GAQ及每个线程的执行队列,每一个事物,在分发之后,都会有一个标号,这个标号在某一段时间内,都是相对固定的,这个编号在某一时间段内都是相对固定的如图:

每一

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值