美文网首页简书付费文章
第25节:从库的关闭和恢复流程

第25节:从库的关闭和恢复流程

作者: 重庆八怪 | 来源:发表于2020-03-19 09:53 被阅读0次

    本节包含一个笔记如下:
    https://www.jianshu.com/p/071dd72bb3ac


    一、正常的STOP SLAVE流程

    为了更加清楚的说明从库异常恢复的流程,我们需要先知道正常关闭从库做了哪些工作,也就是‘stop slave’命令发起后做了哪些工作。我就以单SQL线程模式下SQL线程如何响应‘stop slave’命令为例进行解释,IO线程也差不多并且更加简单,而MTS中更加复杂但是基本原理一致。

    在前面23节的流程图中我们可以看到单SQL线程会以Event为单位进行应用,最前面有一层循环用于循环读取Event并且应用。响应‘stop slave’正是在这个循环的判断条件中。

    实际上‘stop slave’ 命令是用户线程发起的,它需要作用于SQL线程和IO线程,他们之间一定要有传递的介质如下:

    • SQL线程:mi->rli->abort_slave
    • IO线程:mi->abort_slave

    而IO线程和SQL线程要到达判断点,需要将上一个Event处理完成再次循环的时候才能进行。其次如果IO线程和SQL线程没有正常终止,那么用户线程执行的‘stop slave’命令需要一直堵塞等待其完成(SQL线程由rli->run_lock和rli->stop_cond实现)。但是参数rpl_stop_slave_timeout可以控制到底等待多久,需要注意的是虽然使用这个参数可以让用户线程退出,但是实际IO线程和SQL线程的关闭操作可能还是没有完成,他们还在继续关闭。

    下面是我以SQL线程为例画了一个简单的示意图。图中忽略了IO线程,因为IO线程一般不会是问题(图25-1):

    相关文章

      网友评论

        本文标题:第25节:从库的关闭和恢复流程

        本文链接:https://www.haomeiwen.com/subject/erjkyhtx.html