驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)

壹頁書發表於2014-07-03
percona-toolkit-2.2.8-1.noarch.rpm有兩個工具可以驗證MySQL主從資料的一致性

安裝tookkit需要一些依賴包
  1. yum install perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes -y
實驗環境


在Master上初始化實驗資料
  1. create database mvbox;
  2. use mvbox;
  3. create table test(id int primary key,name varchar(20));
  4. insert into test values(1,'a'),(2,'b'),(3,'c'),(4,'d');
因為主從環境已經搭建,這些資料會自動同步到Slave上。

在Slave從庫新增一個資料,模擬主從資料不一致的場景。
  1. insert into test values(5,'e');
在Master主庫執行pt-table-checksum命令。
它會使用concat_ws函式將資料合併為一行,然後使用crc32函式生成校驗碼,最後將其插入percona庫的checksums表中。

因為主從環境,這個資料會複製到Slave
也就是說Slave的percona.checksums表,存放的是主庫資料的校驗碼。
所以在Slave對資料執行同樣的校驗,然後比對checksums表中的資料,就可以驗證主從是否一致。

所以執行pt-table-checksum命令的帳號,至少需要有全庫的只讀許可權和percona庫的讀寫許可權。
  1. create user xx;
  2. GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'xx'@'%' IDENTIFIED BY 'xx';
  3. grant all privileges on percona.* TO 'xx'@'%' IDENTIFIED BY 'xx';

檢視主從一致的情況

  1. TS :完成檢查的時間。
  2. ERRORS :檢查時候發生錯誤和警告的數量。
  3. DIFFS :0表示一致,1表示不一致。當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的資訊。
  4. ROWS :表的行數。
  5. CHUNKS :被劃分到表中的塊的數目。
  6. SKIPPED :由於錯誤或警告或過大,則跳過塊的數目。
  7. TIME :執行的時間。
  8. TABLE :被檢查的表名。
常用引數
  1. --nocheck-replication-filters :不檢查複製過濾器,建議啟用。後面可以用--databases來指定需要檢查的資料庫。
  2. --no-check-binlog-format : 不檢查複製的binlog模式,要是binlog模式是ROW,則會報錯。
  3. --replicate-check-only :只顯示不同步的資訊。
  4. --replicate= :把checksum的資訊寫入到指定表中,建議直接寫到被檢查的資料庫當中。
  5. --databases= :指定需要被檢查的資料庫,多個則用逗號隔開。
  6. --tables= :指定需要被檢查的表,多個用逗號隔開
  7. h=127.0.0.1 :Master的地址
  8. u=root :使用者名稱
  9. p=123456:密碼
  10. P=3306 :埠
可以看到這個工具已經檢測到了主從不一致的情況。

如果發生不一致,可以使用pt-table-sync命令修復。
需要注意的是這個命令需要在Slave從庫執行。
使用print引數,他會在螢幕顯示修復的SQL語句。然後可以手工確認並執行。


也可以通過這個命令自動執行,不過這樣會修改從庫的資料,感覺不是太安全。



需要特別注意的是這兩個命令執行的過程中,會對錶上共享鎖,所以生產環境要慎重選擇執行時間。

參考:
http://nettedfish.sinaapp.com/blog/2013/06/04/check-replication-consistency-by-pt-table-checksum/
http://www.cnblogs.com/zhoujinyi/archive/2013/05/09/3067045.html
http://blog.chinaunix.net/uid-16844903-id-3360228.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1208415/,如需轉載,請註明出處,否則將追究法律責任。

相關文章