mysql中如何运用pt-table-checksum和pt-table-sync

这篇文章给大家分享的是有关mysql中如何使用pt-table-checksum和pt-table-sync的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
 
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 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=               用户名(该用户在从库上也要有,同时需要权限)
  
校验:
 
[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执行不过去)

dawei

【声明】:毕节站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。