溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發(fā)布時間:2020-08-11 12:19:03 來源:ITPUB博客 閱讀:114 作者:Jiang_beyond 欄目:MySQL數(shù)據(jù)庫
percona-toolkit-2.2.8-1.noarch.rpm有兩個工具可以驗證MySQL主從數(shù)據(jù)的一致性

安裝tookkit需要一些依賴包
  1. yum install perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes -y
實驗環(huán)境
驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)

在Master上初始化實驗數(shù)據(jù)
  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');
因為主從環(huán)境已經(jīng)搭建,這些數(shù)據(jù)會自動同步到Slave上。

在Slave從庫添加一個數(shù)據(jù),模擬主從數(shù)據(jù)不一致的場景。
  1. insert into test values(5,'e');
在Master主庫執(zhí)行pt-table-checksum命令。
它會使用concat_ws函數(shù)將數(shù)據(jù)合并為一行,然后使用crc32函數(shù)生成校驗碼,最后將其插入percona庫的checksums表中。
驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)
因為主從環(huán)境,這個數(shù)據(jù)會復制到Slave
也就是說Slave的percona.checksums表,存放的是主庫數(shù)據(jù)的校驗碼。
所以在Slave對數(shù)據(jù)執(zhí)行同樣的校驗,然后比對checksums表中的數(shù)據(jù),就可以驗證主從是否一致。

所以執(zhí)行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';

查看主從一致的情況
驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)
  1. TS :完成檢查的時間。
  2. ERRORS :檢查時候發(fā)生錯誤和警告的數(shù)量。
  3. DIFFS :0表示一致,1表示不一致。當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的信息。
  4. ROWS :表的行數(shù)。
  5. CHUNKS :被劃分到表中的塊的數(shù)目。
  6. SKIPPED :由于錯誤或警告或過大,則跳過塊的數(shù)目。
  7. TIME :執(zhí)行的時間。
  8. TABLE :被檢查的表名。
常用參數(shù)
  1. --nocheck-replication-filters :不檢查復制過濾器,建議啟用。后面可以用--databases來指定需要檢查的數(shù)據(jù)庫。
  2. --no-check-binlog-format : 不檢查復制的binlog模式,要是binlog模式是ROW,則會報錯。
  3. --replicate-check-only :只顯示不同步的信息。
  4. --replicate= :把checksum的信息寫入到指定表中,建議直接寫到被檢查的數(shù)據(jù)庫當中。
  5. --databases= :指定需要被檢查的數(shù)據(jù)庫,多個則用逗號隔開。
  6. --tables= :指定需要被檢查的表,多個用逗號隔開
  7. h=127.0.0.1 :Master的地址
  8. u=root :用戶名
  9. p=123456:密碼
  10. P=3306 :端口
可以看到這個工具已經(jīng)檢測到了主從不一致的情況。

如果發(fā)生不一致,可以使用pt-table-sync命令修復。
需要注意的是這個命令需要在Slave從庫執(zhí)行。
使用print參數(shù),他會在屏幕顯示修復的SQL語句。然后可以手工確認并執(zhí)行。
驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)

也可以通過這個命令自動執(zhí)行,不過這樣會修改從庫的數(shù)據(jù),感覺不是太安全。
驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)
驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)

需要特別注意的是這兩個命令執(zhí)行的過程中,會對表上共享鎖,所以生產(chǎn)環(huán)境要慎重選擇執(zhí)行時間。

參考:
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
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI