Mysql

基於行的複制上的數據漂移

  • August 9, 2017

我意識到我的一個 mysql 從屬伺服器缺少行。在主伺服器上的特定表上選擇計數:9605010 從伺服器上:9593831

slave 完全同步,沒有 seconds_behind_master,沒有錯誤,沒有慢日誌

主從版本:mysql Ver 14.14 Distrib 5.6.35-80.0,debian-linux-gnu (x86_64) 使用 6.3

sync_binlog=1,基於行的複制

我不確定是否使用 pt-table-checksum,因為這是一個 prod 系統。無論如何,什麼可能導致 rbr 上的數據漂移?

沒有調查是不可能知道的。創建從屬伺服器時可能會出現錯誤,可能是直接寫入從屬伺服器,複製中的錯誤,應用程序中的錯誤SET binlog=0等。

更糟糕的是,事後調查非常困難。您需要為數據漂移故障排除做準備。

pt-table-checksum將是你的第一步。這是一個成熟的工具,可以在 prod 上安全使用,但也可能出現問題。最有可能的是鎖定問題、死鎖。如果需要更加偏執,我設置--chunk-time為 0.1 甚至更低。

查找數據中的差異,查看它(您可能希望使用twindb_table_compare查找哪些行失去/額外/不同),並修復不匹配(pt-table-sync根據數據漂移的大小使用或重建從屬)。

並放入pt-table-checksumcron。如果一次執行需要很長時間(比如 1 - 2 天),我建議將發現和警報部分分開(即大量pt-table-checksum填充percona.checksums和一個輕量級腳本檢查percona.checksums並在發現不一致時發出警報)。在我的系統上,我pt-table-checksum連續執行。

然後,當發現不一致時,檢查數據、二進制日誌,然後你就會找出它的來源。

引用自:https://dba.stackexchange.com/questions/182980