percona-toolkit-2.2.20-1.noarch
mysql 5.6.29-log
master:192.168.166.129
slave:192.168.166.131
一、創建數據庫校驗存放庫
CREATE DATABASE IF NOT EXISTS percona CHARACTER SET utf8;
二、建立數據校驗用戶
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksums'@'192.168.166.129' IDENTIFIED BY 'checksums'; GRANT ALL ON percona.* TO 'checksums'@'192.168.166.129';
三、建立dsn信息存放表,解決從庫端口為非3306的問題,如果是多個slave添加多條記錄即可
use percona; CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO dsns (parent_id,dsn) values(1, "h=192.168.166.131,P=3306");
四、數據一致性校驗檢查
pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P=3306 --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns --no-check-binlog-format
--replicate #把checksum的信息寫入到指定表中
--nocheck-replication-filters #不檢查復制過濾器,建議啟用
--no-check-binlog-format #只支持statment格式,不檢查binlog格式,忽略二進制格式檢查
--recursion-method #檢查從庫的方法,默認是processlist,如果端口為非3306,會無法連接從庫,推薦使用dsn方法
五、查看不一致數據
pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P=3306 --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns --no-check-binlog-format --replicate-check-only -- 或者在從庫執行下面語句,獲取不一致數據結果 select * from percona.checksums where master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)
6、修復不一致數據
pt-table-sync --execute --replicate percona.checksums --sync-to-master h=192.168.166.131,P=3306,u=root,p=xxxxxx
修復數據,需要有update權限,我這里使用root用戶,這里的主機為需要修復的從機
7、如果修復了不一致數據,需要再次校驗,對比是否已修復
pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P=3306 --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns --no-check-binlog-format pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P=3306 --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns --no-check-binlog-format --replicate-check-only
