共计 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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!