MySQL不同復制模式下,如何忽略某些binlog事件

DanGSE 8年前發布 | 7K 次閱讀 MySQL 數據庫服務器

來自: http://ourmysql.com/archives/1419

導讀

在MySQL復制中,如何忽略slave節點上發生的主鍵沖突、數據不存在等錯誤。

在MySQL復制中,如果slave節點上遇到錯誤,比如數據不存在或者主鍵沖突等錯誤時,想要忽略這些錯誤,可以采用以下幾種方法:

1、未啟用GTID模式時

只需通過設定 SQL_SLAVE_SKIP_COUNTER 的值,即可忽略一些復制事件。例如:

#需要先關閉SLAVE服務

root@imysql.com [test]> STOP SLAVE;

#忽略N個事件(event),通常一個SQL是一個事件

root@imysql.com [test]> SET SQL_SLAVE_SKIP_COUNTER=N;

#再次啟動SLAVE服務

root@imysql.com [test]> START SLAVE;

2、啟用GTID模式時

啟用GTID,想要忽略某些錯誤事件就稍微麻煩一點點了。

首先,我們需要先查看當前SLAVE復制的進度:

mysql> SHOW SLAVE STATUS\G

從中看到,當前SLAVE復制的GTID進展是:

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_Errno: 1062

Last_Error: …Duplicate…key ‘PRIMARY’, Error_code: 1062;…

Master_UUID: f2b6c829-9c87-11e4-84e8-deadeb54b599

Retrieved_Gtid_Set: 3a16ef7a-75f5-11e4-8960-deadeb54b599:1-283,f2b6c829-9c87-11e4-84e8-deadeb54b599:1-33

Executed_Gtid_Set: 3a16ef7a-75f5-11e4-8960-deadeb54b599:1-283,f2b6c829-9c87-11e4-84e8-deadeb54b599:1-31

Auto_Position: 1

從上面的信息可以看到,當前從MASTER取到了 1-33 的事務列表,并且已執行(看 Executed_Gtid_Set )到了 31 這個事務GTID位置,在這下一個位置( 32 )上發生錯誤。

這時候,我們需要手工調整SLAVE已清除的GTID列表 GTID_PURGED ,人為通知SLAVE哪些事務已經被清除了,后續可以忽略:

root@imysql.com [test]> STOP SLAVE;

root@imysql.com [test]> RESET MASTER;

root@imysql.com [test]> SET @@GLOBAL.GTID_PURGED = “3a16ef7a-75f5-11e4-8960-deadeb54b599:1-283,f2b6c829-9c87-11e4-84e8-deadeb54b599:1-32”;

root@imysql.com [test]> START SLAVE;

上面這些命令的用意是,忽略 f2b6c829-9c87-11e4-84e8-deadeb54b599:32 這個GTID事務,下一次事務接著從 33 這個GTID開始,即可跳過上述錯誤。

3、無論是否啟用GTID,使用pt-slave-restart工具

首先不得不說,percona toolkit工具集對DBA而言實在太方便了。 pt-slave-restart 工具的作用是監視某些特定的復制錯誤,然后忽略,并且再次啟動SLAVE進程(Watch and restart MySQL replication after errors)。

簡單用法示例:

#忽略所有1062錯誤,并再次啟動SLAVE進程

[yejr@imysql.com ]# pt-slave-resetart -S./mysql.sock —error-numbers=1062

#檢查到錯誤信息只要包含 test.yejr,就一概忽略,并再次啟動 SLAVE 進程

[yejr@imysql.com ]# pt-slave-resetart -S./mysql.sock —error-text=”test.yejr”

綜上,我們雖然可以利用工具來快速忽略復制錯誤,但還是要掌握如何人為忽略復制錯誤的方法,在沒有工具的時候也能了然于胸。

</div> </div>

 本文由用戶 DanGSE 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!