mysql主從復制跳過復制錯誤【轉】


跳過復制錯誤

mysql因為binlog機制問題,有些時候會出現從庫重放sql執行失敗的情況,特別是舊的STATEMENT模式最容易出現這種情況(因為函數和存儲過程等原因),這也是為什么強調使用mixed和row模式的原因。另外就是一些外部XA事務,因為XA事務日志不在mysql中,有時候會出現回滾失敗的情況,導致主從報錯。

出現這些狀況那該怎么辦好呢?如果是重做,雖然是可以,但是如果庫非常大,那耗時就不是一兩小時那么容易,如果是做了生產讀寫分離的,就不好交代了。這個時候我們可以選擇手動修改數據,然后跳過這個復制錯誤,然后這個主從復制就會重新運行了。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#找到沖突的GTID號.
mysql>show slave status\G
    
    
    
Executed_Gtid_Set: 09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451
    
    
    
#停止復制
mysql>stop slave;
#然后執行設置一個事務GTID來跳過,就是要跳過這個事務的意思
mysql>SET gtid_next =  '09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451' ;
#注入空事務
mysql>BEGIN;COMMIT;
#把GTID設置回自動模式
mysql>SET gtid_next =  'AUTOMATIC' ;
#重新開啟復制
mysql>START SLAVE;
#這就可以跳過一個事務了,原理在於通過執行一個空事務代替master傳遞過來的沖突事務.
#當然跳過了,並不代表這個數據就不修改了,還是要你手動去修改一下,這樣就一切回歸正常了
mysql>update tables  set  。。。。。。。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#找到沖突的GTID號.
mysql>show slave status\G
    
    
    
Executed_Gtid_Set: 09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648451
    
    
    
#停止復制
mysql>stop slave;
#直接設置上面的GTID值+1
mysql>SET @@GLOBAL.GTID_PURGED= '09cb91bf-2669-11e7-8b70-00163e0835ff:1-83648452' ;
#重新開啟復制
mysql>START SLAVE;
#當然跳過了,並不代表這個數據就不修改了,還是要你手動去修改一下,這樣就一切回歸正常了
mysql>update tables  set  。。。。。。。

然后就說傳統模式了,相對來說,更簡單一些

1
2
3
4
5
6
7
8
#停止復制
mysql>slave stop;
#設定跳過一個事務
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1
#重新開啟復制
mysql>slave start
#這樣就正常了,但是,當然還是要把數據修改上去
mysql>update tables  set  。。。。。。。

其實還有一個禁忌設定方式,可以跳過一些復制報錯,因為不建議,只是拿出來說說可以這么干

1
2
3
4
5
6
7
#修改配置文件
vim  /etc/my .cnf
[mysqld]
#跳過指定error no類型的錯誤
#slave-skip-errors=1062,1053,1146
#跳過所有錯誤
#slave-skip-errors=all

轉自

mysql主從復制跳過復制錯誤-ping_note-51CTO博客

http://blog.51cto.com/arthur376/1969935


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM