mysql主從複製跳過複製錯誤【轉】

跳過複製錯誤mysql

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

出現這些情況那該怎麼辦好呢?若是是重作,雖然是能夠,可是若是庫很是大,那耗時就不是一兩小時那麼容易,若是是作了生產讀寫分離的,就很差交代了。這個時候咱們能夠選擇手動修改數據,而後跳過這個複製錯誤,而後這個主從複製就會從新運行了。vim

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

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  。。。。。。。

而後就說傳統模式了,相對來講,更簡單一些spa

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

轉自code

mysql主從複製跳過複製錯誤-ping_note-51CTO博客orm

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

相關文章
相關標籤/搜索