利用percona-toolkit工具檢查MySQL數據庫主從復制數據的一致性,以及修復。
一、pt-table-checksum檢查主從庫數據的一致性
pt-table-checksum在MASTER上校驗指定庫、表,將結果存在一個庫表里,復制進程將檢驗sql傳遞到slave上再執行一次。通過比較M/S的檢驗值確定數據是否一致。利用主從復制做檢驗,不需要在檢驗期間對主從數據庫同時鎖表,可以控制校驗的數據和速度,不影響到正常服務。
安裝:
#依賴包yum –y perl-DBI perl-DBD-MySQL perl-TermReadKey#percona-toolkit包wget http://www.percona.com/downloads/percona-toolkit/LATEST/percona-toolkit-2.2.4.tar.gztar xzvf percona-toolkit-2.2.4.tar.gz ; cd percona-toolkit-2.2.4 ; perl Makefile.pl && make && make install
使用方法:
pt-table-checksum [OPTIONS] [DSN]
pt-table-checksum:在主<M>上通過執行校驗的查詢對復制的一致性進行檢查,對比主從的校驗值,從而產生結果。DSN指向的是主的地址,該工具的退出狀態不為零,如果發現有任何差別,或者如果出現任何警告或錯誤,更多信息請見官網。
不指定任何參數,會直接對本地的所有數據庫的表進行檢查。
pt-table-checksum –S /tmp/mysqld.sock u=root,p=123456
環境:
#主庫:mysql> select * from t1;+----+------+| id | name |+----+------+| 1 | aa || 2 | bb || 3 | cc || 4 | dd || 5 | ee |+----+------+5 rows in set (0.00 sec)#從庫:mysql> select * from t1;+----+------+| id | name |+----+------+| 1 | aa || 2 | bb || 3 | cc || 4 | dd |+----+------+4 rows in set (0.00 sec)
注意:
1、 根據測試,需要一個技能登錄主庫,也能登錄從庫,而且還能同步數據庫的賬號;
2、 只能指定一個host,必須為主庫的IP;
3、 在檢查時會向表加S鎖;
4、 運行之前需要從庫的同步IO和SQL進程是YES狀態。
可以用該語句授權用戶,這里為了方便直接用root用戶了
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO ‘checksums’@’x.x.x.x’ IDENTIFIED BY ‘xxxx’;
執行檢測(MASTER上):
pt-table-checksum --nocheck-replication-filters --replicate=test.checksum --databases=test h=192.168.68.235,u=root,p=123 --empty-replicate-table --create-replicate-table TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE09-18T12:03:16 0 1 5 1 0 0.018 test.t1
參數說明:
TS :完成檢查的時間。
ERRORS :檢查時候發生錯誤和警告的數量。
DIFFS :0表示一致,1表示不一致。當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的信息。
新聞熱點
疑難解答