共計 3368 個字符,預計需要花費 9 分鐘才能閱讀完成。
這篇文章給大家分享的是有關 mysql 中如何使用 pt-table-checksum 和 pt-table-sync 的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
pt-table-checksum 和 pt-table-sync 是 percona-toolkit 工具中的功能,用來檢測主從數據一致性和修復主從不一致。
下面通過一組實驗學習這兩個功能的使用
1、主庫創建表并插入數據
CREATE TABLE `NewTable` (
`id` int(8) NULL ,
`name` varchar(32) NULL ,
PRIMARY KEY (`id`)
) ;
insert into newtable values(1, leo
insert into newtable values(2, mike
insert into newtable values(3, jack
2、從庫執行下面語句,讓主從不一致
insert into newtable values(4, lucy
insert into newtable values(5, petter
update newtable set name= john where id =1
3、測試數據如下
主庫:
mysql select * from test.newtable;
+—-+——+
| id | name |
+—-+——+
| 1 | leo |
| 2 | mike |
| 3 | jack |
+—-+——+
3 rows in set (0.00 sec)
從庫:
mysql select * from test.newtable;
+—-+——–+
| id | name |
+—-+——–+
| 1 | john |
| 2 | mike |
| 3 | jack |
| 4 | lucy |
| 5 | petter |
+—-+——–+
5 rows in set (0.00 sec)
4、pt-table-checksum 參數介紹、使用
–port= 主庫端口
–host= 主庫 IP
–databases= 校驗的數據庫
–tables= 校驗 的表名,只指定數據庫不指定表名,校驗數據庫下所有表
–user= 用戶名(該用戶在從庫上也要有,同時需要權限)
–password= 用戶密碼
–replicate 指定 checksum 存儲的庫和表
–no-check-binlog-format 忽略 binlog 的格式,如果 binlog 是 ROW 或者 MIXED 不加這個參數都會報錯
–no-check-replication-filters 忽略復制過濾,如 binlog_ignore_db、slave-skip-errors 等選項
–help 更多更詳細的參數請見 –help 幫助文檔
校驗:
[root@trcloud ~]# pt-table-checksum –port=3306 –host=192.168.129.15 –databases=test –tables=newtable –user=root –password= 123456 –replicate=test.check –no-check-binlog-format –no-check-replication-filters
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
12-13T13:44:07 0 1 3 1 0 0.059 test.newtable
注:檢查的時候會向表加 S 鎖
TS: 完成的檢查時間
ERRORS:檢查時候發生的錯誤和告警數量
DIFFS: 0 表示一致,1 表示不一致
ROWS: 表行數
CHUNKS:被劃分到表中的塊數量
SKIPPED:由于錯誤跳過的數目
TIME: 執行時間
TABLE: 表名
5、使用 pt-table-sync 修復不一致
–replicate= 指定 pt-table-checksum 得到的表
h= 主庫 IP
u= 用戶名
p= 密碼
–execute 執行修復
–print 打印出 sql 語句
–help 更多更詳細的參數請見 –help 幫助文檔
[root@trcloud ~]# pt-table-sync –replicate=test.check h=192.168.129.15,u=root,p= 123456 –execute –print
DELETE FROM `test`.`newtable` WHERE `id`= 4 LIMIT 1 /*percona-toolkit src_db:test src_tbl:newtable src_dsn:h=192.168.129.15,p=…,u=root dst_db:test dst_tbl:newtable dst_dsn:h=172.30.249.5,p=…,u=root lock:1 transaction:1 changing_src:test.check replicate:test.check bidirectional:0 pid:19211 user:root host:trcloud*/;
DELETE FROM `test`.`newtable` WHERE `id`= 5 LIMIT 1 /*percona-toolkit src_db:test src_tbl:newtable src_dsn:h=192.168.129.15,p=…,u=root dst_db:test dst_tbl:newtable dst_dsn:h=172.30.249.5,p=…,u=root lock:1 transaction:1 changing_src:test.check replicate:test.check bidirectional:0 pid:19211 user:root host:trcloud*/;
REPLACE INTO `test`.`newtable`(`id`, `name`) VALUES (1 , leo) /*percona-toolkit src_db:test src_tbl:newtable src_dsn:h=192.168.129.15,p=…,u=root dst_db:test dst_tbl:newtable dst_dsn:h=172.30.249.5,p=…,u=root lock:1 transaction:1 changing_src:test.check replicate:test.check bidirectional:0 pid:19211 user:root host:trcloud*/;
從打印的 sql 來看,如果從庫數據多了使用 delete 刪除,其他情況修復主從不一致使用的是 REPLACE INTO。所以表上一定要有主鍵,不然不僅會報錯,也會導致主從同步失敗(因為在從庫執行 REPLACE INTO 執行不過去)
6、檢查主從一致
[root@trcloud ~]# pt-table-checksum –port=3306 –host=192.168.129.15 –databases=test –tables=newtable –user=root –password= 123456 –replicate=test.check –no-check-binlog-format –no-check-replication-filters
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
12-13T13:48:18 0 0 3 1 0 0.108 test.newtable
數據已經正常
感謝各位的閱讀!關于“mysql 中如何使用 pt-table-checksum 和 pt-table-sync”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!