第25節(jié):從庫(kù)的關(guān)閉和恢復(fù)流程


本節(jié)包含一個(gè)筆記如下:
http://www.itdecent.cn/p/071dd72bb3ac


一、正常的STOP SLAVE流程

為了更加清楚的說(shuō)明從庫(kù)異常恢復(fù)的流程,我們需要先知道正常關(guān)閉從庫(kù)做了哪些工作,也就是‘stop slave’命令發(fā)起后做了哪些工作。我就以單SQL線程模式下SQL線程如何響應(yīng)‘stop slave’命令為例進(jìn)行解釋,IO線程也差不多并且更加簡(jiǎn)單,而MTS中更加復(fù)雜但是基本原理一致。

在前面23節(jié)的流程圖中我們可以看到單SQL線程會(huì)以Event為單位進(jìn)行應(yīng)用,最前面有一層循環(huán)用于循環(huán)讀取Event并且應(yīng)用。響應(yīng)‘stop slave’正是在這個(gè)循環(huán)的判斷條件中。

實(shí)際上‘stop slave’ 命令是用戶線程發(fā)起的,它需要作用于SQL線程和IO線程,他們之間一定要有傳遞的介質(zhì)如下:

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

而IO線程和SQL線程要到達(dá)判斷點(diǎn),需要將上一個(gè)Event處理完成再次循環(huán)的時(shí)候才能進(jìn)行。其次如果IO線程和SQL線程沒(méi)有正常終止,那么用戶線程執(zhí)行的‘stop slave’命令需要一直堵塞等待其完成(SQL線程由rli->run_lock和rli->stop_cond實(shí)現(xiàn))。但是參數(shù)rpl_stop_slave_timeout可以控制到底等待多久,需要注意的是雖然使用這個(gè)參數(shù)可以讓用戶線程退出,但是實(shí)際IO線程和SQL線程的關(guān)閉操作可能還是沒(méi)有完成,他們還在繼續(xù)關(guān)閉。

下面是我以SQL線程為例畫(huà)了一個(gè)簡(jiǎn)單的示意圖。圖中忽略了IO線程,因?yàn)镮O線程一般不會(huì)是問(wèn)題(圖25-1):

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
支付 ¥2.00 繼續(xù)閱讀

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容