1. 程式人生 > >使用pt-table-checksum檢查主從一致性

使用pt-table-checksum檢查主從一致性

使用 percona 工具檢查主從不一致

可以使用 pt-table-checksum  工具檢查主從資料的一致性,檢查完之後預設會生成一個 percona 庫以及一個 checksums 表,記錄了當前例項和主庫對比的結果。表結構如下:

 

主要關注的是 this_crc和master_crc 的值,和this_cnt、master_cnt 這兩對引數的值是否一致,若不一致說明主從之間有不一致的資料。

下面簡單看一下  pt-table-checksum 工具的用法:

pt-table-checksum h='192.168.0.45',u='root',p='115433',P=19102, --nocheck-binlog-format  --recursion-method=processlist --nocheck-replication-filters --databases=test[DSN] 指定主庫的登入方式,包括ip,使用者名稱,密碼,埠等選項

--recursion-method 引數有四:processlist/hosts/dsn=DSN/no,預設是processlist,hosts,但最好還是指定一下,建議指定--recursion-method=processlist,no一般不使用

--nocheck-replication-filters :不檢查複製過濾器,建議啟用。後面可以用--databases來指定需要檢查的資料庫。

 --max-lag   預設1S,主從最大延遲,超過這個延遲時間,就會停下來等待從庫同步,確定方法是採用Seconds_Behind_Master的值


--no-check-binlog-format : 不檢測日誌格式。這個選項對於 ROW 模式的複製很重要,因為pt-table-checksum會在 Master和Slave 上設定binlog_format=STATEMENT(確保從庫也會執行 checksum SQL),
  MySQL限制從庫是無法設定的,所以假如行復制從庫,再作為主庫複製出新從庫時(A->B->C),B的checksums資料將無法傳輸
--replicate= :把checksum的資訊寫入到指定表中,如果沒有指定,預設是 percona.checksums ;建議直接寫到被檢查的資料庫當中,若不指定,生成一個 percona庫,建立checksums表
--databases=,-d :要檢查的資料庫,逗號分隔;--databases-regex 正則匹配要檢測的資料庫,--ignore-databases[-regex]忽略檢查的庫。
--tables=,-t :要檢查的表,逗號分隔。如果要檢查的表分佈在不同的db中,可以用--tables=dbname1.table1,dbnamd2.table2的形式 --ignore-tables
--create-replicate-table 選項會自動建立 percona.checksums 表 需要建表許可權
--empty-replicate-table:每個表checksum開始前,清空它之前的檢測資料(不影響其它表的checksum資料),預設yes

--resume 如果主從一致性檢查中途中斷的話,可以用這個引數來使工具從上次中斷時檢查的最後一個表開始繼續檢查<