溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL主從復(fù)制斷開如何修復(fù)

發(fā)布時(shí)間:2021-04-07 15:33:47 來源:億速云 閱讀:301 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了MySQL主從復(fù)制斷開如何修復(fù),內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

      主從復(fù)制關(guān)系斷裂,有各種各樣的原因。有些時(shí)候,我們沒有時(shí)間去客觀分析原因,因?yàn)閼?yīng)用程序處于無法使用狀態(tài),需要立即恢復(fù),這種情況下,我們對(duì)復(fù)制斷裂問題和服務(wù)可用性之間必須做一個(gè)權(quán)衡,然后再進(jìn)行相應(yīng)的處理。

常見的解決主從復(fù)制斷裂的方法有以下幾種:

1、找到其他從庫,快速替換

   這種方法,需要你的應(yīng)用具有至少一主兩從的架構(gòu),其中一個(gè)從庫發(fā)生問題,可以將另外一個(gè)從庫快速上線,從而恢復(fù)應(yīng)用訪問,后續(xù)再來排查出現(xiàn)故障的從庫的具體問題原因。

2、跳過復(fù)制失敗的錯(cuò)誤

    有些情況下,我們可以判斷主從復(fù)制斷裂的原因,例如主庫上比從庫上多一個(gè)數(shù)據(jù)庫db_1,那么當(dāng)我們?cè)谥鲙焐蠄?zhí)行drop database db_1的時(shí)候,從庫的復(fù)制一定會(huì)斷開。這種情況下,我們可以通過跳過一個(gè)事務(wù)來解決。

方法一:(直接跳過當(dāng)前事務(wù))

    在GTID模式下,可以通過下面的命令來解決:

mysql> STOP SLAVE;
mysql> SET GTID_NEXT='xxxxxx:yyy'; ----- 設(shè)置需要跳過的gtid event
mysql> BEGIN;COMMIT;
mysql> SET GTID_NEXT='AUTOMATIC';
mysql> START SLAVE;

   在非GTID模式下,可以通過下面的命令來解決:

stop slave;
set sql_slave_skip_counter=1;
start slave;
方法二:(指定新位置)

    如果我們通過binlog分析,知道了下一個(gè)事務(wù)的具體點(diǎn)位,也可以指定下一個(gè)事務(wù)具體位置的方法來解決:

GTID模式下:

mysql>  STOP SLAVE;
mysql>  RESET MASTER;
mysql>  SET @@GLOBAL.GTID_PURGED ='xxxxxxx:yyyyyy'  ----- 表示這些gtid event已經(jīng)執(zhí)行過了
mysql>  START SLAVE;

注意,GTID_PURGED 必須是 GLOBAL,上面的命令也可以寫成set global gtid_purged='xxx:yyy'

非GTID模式下:

stop slave;
change master to master_log_file='mysql-bin.001360',master_log_pos=676383371;
start slave;
方法三:pt-slave-restart工具

    如果我們跳過一個(gè)事務(wù)之后,還出現(xiàn)斷開的場(chǎng)景(例如我們?cè)趶膸焐蟿h除了100條數(shù)據(jù),但是主庫要更新這100條數(shù)據(jù)),可以使用pt-slave-restart這個(gè)工具,它可以連續(xù)跳過斷開的位置。

    它的使用方法如下:

pt-slave-restart -h 10.xxx.xxx.xxx -P port -u user -p password

   當(dāng)我們使用并行復(fù)制的時(shí)候,pt-slave-restart可能會(huì)出現(xiàn)報(bào)錯(cuò),這個(gè)時(shí)候我們可以通過將并行復(fù)制修改為單線程復(fù)制,然后再使用pt-slave-restart工具,可以參考這篇文章:

pt-slave-restart工具

方法四:設(shè)置參數(shù)slave_exec_mode

     這個(gè)參數(shù)可以修改主從復(fù)制過程中的從庫執(zhí)行模式,如果是strict嚴(yán)格模式,則所有的復(fù)制一旦報(bào)錯(cuò)就會(huì)停止,如果設(shè)置成idempotent冪等模式,則特定錯(cuò)誤號(hào)的錯(cuò)誤將會(huì)被跳過。命令如下:

set global slave_exec_mode = idempotent

3、利用備份重建從庫

   這種方法的使用場(chǎng)景不多,通常情況下,只有從庫已經(jīng)不可用或者無法從主庫同步的時(shí)候,才會(huì)考慮這種方法,例如主庫上執(zhí)行了reset master操作,導(dǎo)致所有的binlog被清理了,這樣從庫就無法獲取讀取正確的binlog,復(fù)制就會(huì)斷開,這種情況下,重建從庫可能是唯一的辦法了。

上述內(nèi)容就是MySQL主從復(fù)制斷開如何修復(fù),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI