pt-table-checksum校验主从一致性,使用pt-table-sync修复数据不一致

pt-table-checksum和pt-table-sync是percona-toolkit(安装文档请见http://blog.itpub.net/29989552/viewspace-2020786/)工具中的功能,用来检测主从数据一致性和修复主从不一致。
下面通过一组实验学习这两个功能的使用

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
数据已经正常

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29989552/viewspace-2130390/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29989552/viewspace-2130390/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值