pt-table-checksum是查看主從一致性的工具, 網上很多人說 pt-table-checksum 要在主庫上執行,其實不是的,我的mysql實例比較多,只需在某一台服務器上安裝percona-toolkit,這台服務能夠同時訪問主庫和從庫就行了。
工具安裝:
1.軟件下載:
# wget https://www.percona.com/downloads/percona-toolkit/3.0.3/binary/redhat/6/x86_64/percona-toolkit-3.0.3-1.el6.x86_64.rpm
2.安裝該工具依賴的軟件包:
# yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes -y
3、軟件安裝
# rpm -ivh percona-toolkit-3.0.3-1.el6.x86_64.rpm
如果提示需要依賴,那么使用下列方式安裝
# yum localinstall percona-toolkit-3.0.3-1.el6.x86_64.rpm
4、查看是否安裝成功
# rpm -qa | grep percona-toolkit
在master和slave創建賬號:
mysql>GRANT SELECT,PROCESS,SUPER,REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'USER'@'HOST' identified by 'PASSWORD';
mysql>flush privileges;
說明:HOST指安裝
percona-toolkit的服務器IP。
在安裝了
percona-toolkit的服務器上執行:
#pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases=cnt --tables=ldb_alipay_order h=Master_HOST,u=root,p=123456,P=3306
--no-check-replication-filters 表示不需要檢查 Master 配置里是否指定了 Filter。 默認會檢查,如果配置了 Filter,如 replicate_do_db,replicate-wild-ignore-table,binlog_ignore_db 等,在從庫checksum就與遇到表不存在而報錯退出,所以官方默認是yes(
--check-replication-filters)但我們實際在檢測中時指定
--databases=,所以就不存在這個問題,干脆不檢測。
--no-check-binlog-format 不對binlog的格式進行檢查
--replicate-check-only 只顯示主從不一致部分,此參數不會生成新的ch
ecksums數據,只會根據checksums表已經有的數據來顯示
--databases=,-d:要檢查的數據庫,逗號分隔。 --databases-regex 正則匹配要檢測的數據庫,--ignore-databases[-regex]忽略檢查的庫。Filter選項。
--tables=,-t:要檢查的表,逗號分隔。如果要檢查的表分布在不同的db中,可以用--tables=dbname1.table1,dbnamd2.table2的形式。
同理有
--tables-regex,--ignore-tables,--ignore-tables-regex。--replicate指定的checksum表始終會被過濾。
[root@master ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases=cent h=127.0.0.1,u=user,p=123456,P=3306
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
06-15T10:24:20 0 0 910 1 0 0.267 cent.ldb_alipay_order
06-15T10:24:21 0 0 1557 1 0 0.283 cent.ldb_charge_history
06-15T10:24:21 0 0 2555 1 0 0.262 cent.ldb_charge_history_detail
06-15T10:24:21 0 0 1488 1 0 0.268 cent.ldb_device
06-15T10:24:21 0 0 7 1 0 0.007 cent.ldb_device_charge
06-15T10:24:21 0 0 34 1 0 0.007 cent.ldb_device_failure
06-15T10:24:21 0 0 0 1 0 0.007 cent.ldb_device_pwd
06-15T10:24:21 0 0 4 1 0 0.007 cent.ldb_failure_info
TS :完成檢查的時間
ERRORS :檢查時候發生錯誤和警告的數量
DIFFS :0表示一致,1表示不一致。當指定–no-replicate-check時,會一直為0,當指定–replicate-check-only會顯示不同的信息
ROWS :表的行數
CHUNKS :被划分到表中的塊的數目
SKIPPED :由於錯誤或警告或過大,則跳過塊的數目
TIME :執行的時間
TABLE :被檢查的表名
提示錯誤:
問題一:
Waiting for the --replicate table to replicate to localhost.localdomain...
問題出在percona.checksums 表在從庫不存在,根本原因是沒有從主庫同步過來,所以看一下從庫是否延遲嚴重。
問題二:
Diffs cannot be detected because no slaves were found. Please read the --recursion-method documentation for information.
上面的提示信息很清楚,因為找不到從,所以執行失敗。用參數--recursion-method 可以指定模式解決.
