溫馨提示×

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

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

mysql主從復(fù)制跳過復(fù)制錯(cuò)誤

發(fā)布時(shí)間:2020-07-07 01:39:14 來源:網(wǎng)絡(luò) 閱讀:14695 作者:arthur376 欄目:MySQL數(shù)據(jù)庫(kù)

跳過復(fù)制錯(cuò)誤

mysql因?yàn)閎inlog機(jī)制問題,有些時(shí)候會(huì)出現(xiàn)從庫(kù)重放sql執(zhí)行失敗的情況,特別是舊的STATEMENT模式最容易出現(xiàn)這種情況(因?yàn)楹瘮?shù)和存儲(chǔ)過程等原因),這也是為什么強(qiáng)調(diào)使用mixed和row模式的原因。另外就是一些外部XA事務(wù),因?yàn)閄A事務(wù)日志不在mysql中,有時(shí)候會(huì)出現(xiàn)回滾失敗的情況,導(dǎo)致主從報(bào)錯(cuò)。

出現(xiàn)這些狀況那該怎么辦好呢?如果是重做,雖然是可以,但是如果庫(kù)非常大,那耗時(shí)就不是一兩小時(shí)那么容易,如果是做了生產(chǎn)讀寫分離的,就不好交代了。這個(gè)時(shí)候我們可以選擇手動(dòng)修改數(shù)據(jù),然后跳過這個(gè)復(fù)制錯(cuò)誤,然后這個(gè)主從復(fù)制就會(huì)重新運(yùn)行了。

繼續(xù)講述兩種模式,先說的是GTID模式,他可以有兩種方式跳過。第一種是用得比較多的,注入空事務(wù)跳過:

#找到?jīng)_突的GTID號(hào).
mysql>show slave status\G
    。
    。
    。
Executed_Gtid_Set: 09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451
    。
    。
    。
#停止復(fù)制
mysql>stop slave;
#然后執(zhí)行設(shè)置一個(gè)事務(wù)GTID來跳過,因?yàn)槲覀兙褪强ㄔ谶@里,所以要跳過83648451這個(gè)事務(wù)的意思
mysql>SET gtid_next = '09cb91bf-2669-11e7-8b70-00163e0835ff:83648451';
#注入空事務(wù)
mysql>BEGIN;COMMIT;
#把GTID設(shè)置回自動(dòng)模式
mysql>SET gtid_next = 'AUTOMATIC';
#重新開啟復(fù)制
mysql>START SLAVE;
#這就可以跳過一個(gè)事務(wù)了,原理在于通過執(zhí)行一個(gè)空事務(wù)代替master傳遞過來的沖突事務(wù).
#當(dāng)然跳過了,并不代表這個(gè)數(shù)據(jù)就不修改了,還是要你手動(dòng)去修改一下,這樣就一切回歸正常了
mysql>update tables set 。。。。。。。

第二種,直接跳過這個(gè)GTID,改做后面的

#找到?jīng)_突的GTID號(hào).
mysql>show slave status\G
    。
    。
    。
Executed_Gtid_Set: 09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451
    。
    。
    。
#停止復(fù)制
mysql>stop slave;
#直接設(shè)置上面的GTID值+1
mysql>SET @@GLOBAL.GTID_PURGED='09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648452';
#重新開啟復(fù)制
mysql>START SLAVE;
#當(dāng)然跳過了,并不代表這個(gè)數(shù)據(jù)就不修改了,還是要你手動(dòng)去修改一下,這樣就一切回歸正常了
mysql>update tables set 。。。。。。。

然后就說傳統(tǒng)模式了,相對(duì)來說,更簡(jiǎn)單一些

#停止復(fù)制
mysql>slave stop;
#設(shè)定跳過一個(gè)事務(wù)
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1
#重新開啟復(fù)制
mysql>slave start
#這樣就正常了,但是,當(dāng)然還是要把數(shù)據(jù)修改上去
mysql>update tables set 。。。。。。。

其實(shí)還有一個(gè)禁忌設(shè)定方式,可以跳過一些復(fù)制報(bào)錯(cuò),因?yàn)椴唤ㄗh,只是拿出來說說可以這么干

#修改配置文件
vim /etc/my.cnf
[mysqld]
#跳過指定error no類型的錯(cuò)誤
#slave-skip-errors=1062,1053,1146
#跳過所有錯(cuò)誤
#slave-skip-errors=all



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

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

AI