驗證MySQL主從一致性(pt-table-checksum&pt-table-sync)
percona-toolkit-2.2.8-1.noarch.rpm有兩個工具可以驗證MySQL主從資料的一致性
安裝tookkit需要一些依賴包
實驗環境
在Master上初始化實驗資料
因為主從環境已經搭建,這些資料會自動同步到Slave上。
在Slave從庫新增一個資料,模擬主從資料不一致的場景。
在Master主庫執行pt-table-checksum命令。
它會使用concat_ws函式將資料合併為一行,然後使用crc32函式生成校驗碼,最後將其插入percona庫的checksums表中。
因為主從環境,這個資料會複製到Slave
也就是說Slave的percona.checksums表,存放的是主庫資料的校驗碼。
所以在Slave對資料執行同樣的校驗,然後比對checksums表中的資料,就可以驗證主從是否一致。
所以執行pt-table-checksum命令的帳號,至少需要有全庫的只讀許可權和percona庫的讀寫許可權。
檢視主從一致的情況
常用引數
可以看到這個工具已經檢測到了主從不一致的情況。
如果發生不一致,可以使用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
安裝tookkit需要一些依賴包
- yum install perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes -y
在Master上初始化實驗資料
-
create database mvbox;
-
use mvbox;
-
create table test(id int primary key,name varchar(20));
- insert into test values(1,'a'),(2,'b'),(3,'c'),(4,'d');
在Slave從庫新增一個資料,模擬主從資料不一致的場景。
- insert into test values(5,'e');
它會使用concat_ws函式將資料合併為一行,然後使用crc32函式生成校驗碼,最後將其插入percona庫的checksums表中。
因為主從環境,這個資料會複製到Slave
也就是說Slave的percona.checksums表,存放的是主庫資料的校驗碼。
所以在Slave對資料執行同樣的校驗,然後比對checksums表中的資料,就可以驗證主從是否一致。
所以執行pt-table-checksum命令的帳號,至少需要有全庫的只讀許可權和percona庫的讀寫許可權。
-
create user xx;
-
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'xx'@'%' IDENTIFIED BY 'xx';
- grant all privileges on percona.* TO 'xx'@'%' IDENTIFIED BY 'xx';
檢視主從一致的情況
- TS :完成檢查的時間。
- ERRORS :檢查時候發生錯誤和警告的數量。
- DIFFS :0表示一致,1表示不一致。當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的資訊。
- ROWS :表的行數。
- CHUNKS :被劃分到表中的塊的數目。
- SKIPPED :由於錯誤或警告或過大,則跳過塊的數目。
- TIME :執行的時間。
- TABLE :被檢查的表名。
- --nocheck-replication-filters :不檢查複製過濾器,建議啟用。後面可以用--databases來指定需要檢查的資料庫。
- --no-check-binlog-format : 不檢查複製的binlog模式,要是binlog模式是ROW,則會報錯。
- --replicate-check-only :只顯示不同步的資訊。
- --replicate= :把checksum的資訊寫入到指定表中,建議直接寫到被檢查的資料庫當中。
- --databases= :指定需要被檢查的資料庫,多個則用逗號隔開。
- --tables= :指定需要被檢查的表,多個用逗號隔開
- h=127.0.0.1 :Master的地址
- u=root :使用者名稱
- p=123456:密碼
- 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Mysql】主從不同的埠使用pt-table-checksum校驗一致性MySql
- FAQ系列|如何保證主從複製資料一致性
- MySQL主從同步校驗與重新同步薦MySql主從同步
- MySQL主從MySql
- MySQL半同步複製資料最終一致性驗證MySql
- 【mysql】mysql的資料庫主從(一主一從)MySql資料庫
- MySQL 主從配置-之-一主一從MySql
- jquery 驗證密碼一致性jQuery密碼
- Linearizability 一致性驗證
- mysql主從配置MySql
- mysql 主從配置MySql
- mysql配置主從MySql
- mysql主從同步MySql主從同步
- mysql主從搭建MySql
- MySQL(14)---Docker搭建MySQL主從複製(一主一從)MySqlDocker
- mysql主從複製(一):一主多從MySql
- Redis的主從資料一致性Redis
- MySQL主從同步配置MySql主從同步
- docker mysql 主從配置DockerMySql
- Oracle MySQL PG主從OracleMySql
- MYSQL主從搭建5.6.38MySql
- Mysql主從熱備MySql
- MySQL主從修復MySql
- MySQL主從切換MySql
- MySQL 主從複製MySql
- MySQL主從備份MySql
- 【MySql】主從複製MySql
- MySQL主從複製MySql
- MySQL的主從複製與MySQL的主主複製MySql
- mysql5.7.22 表沒有主鍵,資料量巨大的時候更新,實驗驗證導致大量主從延時MySql
- Mysql實現主從複製(一主雙從)MySql
- MYSQL資料庫主從同步(一主一從)MySql資料庫主從同步
- MySQL主從同步(一主一從、一主多從、主從從)等結構的概述與配置MySql主從同步
- MySQL主從複製與主主複製MySql
- MySQL 5.7主從新增新從庫MySql
- MySQL++:Liunx - MySQL 主從複製MySql
- MySQL(13)---MYSQL主從複製原理MySql
- mysql replication /mysql 主從複製原理MySql