mysql中如何使用pt

70次阅读
没有评论

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计3368字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)