加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2023-10-12 13:40:06 所属栏目:MySql教程 来源:
导读:这篇文章给大家分享的是有关mysql中如何使用pt-table-checksum和pt-table-sync的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。pt-table-checksum和pt-table-sync是percona-toolkit工具

这篇文章给大家分享的是有关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、测试数据如下

主库:

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

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章