MySQL主從數據一致性檢驗

MySQL主從數據一致性檢驗

檢查主從數據一致性,咱們使用pt-table-checksum ,pt-table-checksum是percona-tools一個工具,用來校驗主從庫數據是否是一致。html

做爲一個MySQL DBA 這個包裏percona-tools的工具,建議你們都學習一下。java

1、安裝percona-tools工具

# wget https://www.percona.com/downloads/percona-toolkit/3.0.6/binary/redhat/7/x86_64/percona-toolkit-3.0.6-1.el7.x86_64.rpm
# yum localinstall percona-toolkit-3.0.6-1.el7.x86_64.rpm

2、pt-table-checksum使用說明

1.參數介紹

--replicate=db1.checksum: 表示把結果存放到db1.checksum表中,默認是在percona.checksum表中。
--recursion-method="processlist": 表示以什麼方式發現從庫。咱們這裏使用 processlist方式。這種方式要求主庫和從庫端口必須相同。若是不相同,只能使用DSN方式。node

--databases=dbname :表示校驗指定庫,不驗證其餘庫。若是是全部庫,能夠不加這個參數就能夠。若是要驗證多個庫,能夠用逗號分隔,例如--databases=db1,db2,db3
--tables=tbname: 表示檢驗指定的表。
--nocheck-binlog-format :不讓命令檢測binlog 格式,使用這個命令的時候,使用的帳號和密碼 也必須能夠從主庫登陸從庫才能夠。不然就報沒法鏈接從庫的錯誤。Cannot connect to P=3306,h=dev-hd-node3,p=...,u=root
--replicate-check-only :表示只顯示不一致的信息。一致信息就不顯示了。只要有顯示錶示出現了不一致。mysql

2.輸出內容介紹

TS:完成檢查的時間。
ERRORS:檢查時候發生錯誤和警告的數量。
DIFFS:0表示一致,1表示不一致。當指定--no-replicate-check時,會一直爲0,當指定--replicate-check-only會顯示不一樣的信息。
ROWS:被檢查表的行數
CHUNKS:被劃分到表中的塊的數目。
SKIPPED:因爲錯誤或警告或過大,則跳過塊的數目。
TIME:執行的時間。
TABLE:被檢查的表名。sql

3.檢測指定庫

# pt-table-checksum --nocheck-binlog-format --replicate=db1.checksum -h localhost -P3306 -u root -p unixfbi --databases=db1 --recursion-method="processlist" 
Checking if all tables can be checksummed ...
Starting checksum ...
Cannot connect to P=3306,h=dev-hd-node3,p=...,u=root
Diffs cannot be detected because no slaves were found.  Please read the --recursion-method documentation for information.
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
01-26T16:08:00      0      0       44       1       0   0.005 db1.tb1
01-26T16:08:00      0      0       13       1       0   0.004 db1.tb2

4.忽略某些庫的檢測

使用 --ignore-databases參數,例如忽略mysql庫的檢測。運維

# pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --ignore-databases=mysql --recursion-method="processlist" 
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
01-26T16:26:16      0      1       30       1       0   0.013 db1.checksum
01-26T16:26:16      0      0       44       1       0   0.013 db1.tb1
01-26T16:26:16      0      0       13       1       0   0.012 db1.tb2
01-26T16:26:16      0      0        1       1       0   0.012 db2.tb3
01-26T16:26:16      0      0        1       1       0   0.012 db2.tb4
01-26T16:26:16      0      0        6       1       0   0.013 sys.sys_config
01-26T16:26:16      0      0        2       1       0   0.013 wbx3306.t1
01-26T16:26:16      0      0        0       1       0   0.013 wbx3306.tp_1

5.只顯示不一致內容

# pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --ignore-databases=mysql --recursion-method="processlist" --replicate-check-only
Checking if all tables can be checksummed ...
Starting checksum ...
Differences on dev-hd-node3
TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
db1.checksum 1 0 1

6.檢測指定表

--databases=dbname --tables=tbname 須要用到這兩個參數工具

# pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --databases=db1 --tables=checksum --recursion-method="processlist" --replicate-check-only     
Checking if all tables can be checksummed ...
Starting checksum ...
Differences on dev-hd-node3
TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
db1.checksum 1 0 1

7.分段檢測

工做中一個表裏可能有幾百萬甚至幾千萬條數據,若是對這樣的表進行一致性檢測的話,花費的時間會很長。因此咱們能夠對錶進行分段檢測,例如檢測前1000行數據,或者5000行到10000行之間的數據。
其實咱們這裏是使用的 --where參數;學習

# pt-table-checksum --nocheck-binlog-format  -h localhost -P3306 -u root -p unixfbi --databases=db1 --tables=checksum --recursion-method="processlist" --replicate-check-only --where="id < 20"

參考文檔

https://www.percona.com/software/database-tools/percona-toolkit
https://www.percona.com/doc/percona-toolkit/LATEST/index.html
http://blog.itpub.net/12679300/viewspace-1454837/spa

本文出自 「運維特工」 博客,轉載請務必保留原文連接 和 http://www.unixfbi.com.net

相關文章
相關標籤/搜索