mysql pt工具数据一致_pt-检查数据一致性

一、安装percona-toolkit

1、下载

wget -P /usr/software https://www.percona.com/downloads/percona-toolkit/3.0.3/binary/redhat/6/x86_64/percona-toolkit-3.0.3-1.el6.x86_64.rpm

2、安装依赖

yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes -y

3、安装工具

yum -y localinstall /usr/software/percona-toolkit-3.0.3-1.el6.x86_64.rpm

rpm-qa | grep percona-toolkit

二、检查主从数据一致性

检查方法

1、主从均安装pt工具

2、为主从添加检查用户

#添加check用户,需要授权SELECT, PROCESS, SUPER, REPLICATION

GRANT SELECT,PROCESS,SUPER,REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON*.* TO 'checksum'@'10.11.%.%' identified by 'checksumpasswd';

flush privileges;

3、检查

pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases=wallet h=masterIP,u=checksum,p=checksumpasswd,P=3306#参数说明--no-check-replication-filters 表示不需要检查 Master 配置里是否指定了 Filter(replicate_do_db,replicate-wild-ignore-table,binlog_ignore_db 等),官方默认是yes(--check-replication-filters),可能出现表不存在而报错退出,如指定--databases=,所以就不存在这个问题,所以可以不检测。--no-check-binlog-format 不对binlog的格式进行检查--replicate-check-only 只显示主从不一致部分,此参数不会生成新的checksums数据,只会根据checksums表已经有的数据来显示--databases=,-d:要检查的数据库,逗号分隔。

--databases-regex 正则匹配要检测的数据库,

--ignore-databases[-regex]忽略检查的库,检查全库。--tables=,-t:要检查的表,逗号分隔。如果要检查的表分布在不同的db中,可以用--tables=dbname1.table1,dbnamd2.table2的形式。

同理有--tables-regex,--ignore-tables,--ignore-tables-regex。--replicate指定的checksum表始终会被过滤。

实验环境及检查结果

travel库

1、新增表情况

主库新增表tmp_2

检查结果:

提示Table travel.tmp_2 does not exist on replica mysql-s

2、删除表情况

主库删除表tmp_1;

检查结果:

删除的tmp_1没有提示

3、表中新增数据情况

tmp表新增一条数据| 266 | 2020031100000165 | 4 |检查结果:

可以查验出

4、表中删除数据情况

tmp删除一条数据 265 | 2019042300000164 | 0检查结果:

可以查验出

5、错误处理

如出现如下错误

Waiting to check replicasfor differences: 0% 00:00remain

方法一:配置文件设置autocommit=ON 重启数据库

方法二:(可能仍然不行)

可进行如下操作(主从均修改)

在下面代码后添加$master_dbh->do("commit");

如下

$update_sth->execute(

# UPDATE repl_table SET

sprintf('%.6f', $tbl->{nibble_time}), # chunk_time

$crc, # master_crc

$cnt, # master_cnt

# WHERE

$tbl->{db},

$tbl->{tbl},

$chunk,

);

$master_dbh->do("commit");

在下面代码后添加$dbh->do("commit");

如下

$sth->{nibble}->execute(

# REPLACE INTO repl_table SELECT

$tbl->{db}, # db

$tbl->{tbl}, # tbl

$chunk, # chunk (number)

$chunk_index, # chunk_index

$lb_quoted, # lower_boundary

$ub_quoted, # upper_boundary

# this_cnt, this_crc WHERE

@{$boundary->{lower}}, # upper boundary values

@{$boundary->{upper}}, # lower boundary values

);

$dbh->do("commit");

修改之后,关闭autocommit ,并清空percona.checksums

三、修复不一致数据

从上执行

pt-table-sync --print --sync-to-master h=slaveIP,P=3306,u=checksum,p='checksumpasswd' --databases=travel --tables=tmp

结果可打印出需要执行的语句

# A software update is available:

#* The current version for Percona::Toolkit is 3.0.5DELETE FROM `travel`.`tmp` WHERE `id`='265' LIMIT 1 /*percona-toolkit src_db:travel src_tbl:tmp src_dsn:P=3306,h=masterIP,p=...,u=checksum dst_db:travel dst_tbl:tmp dst_dsn:P=3306,h=slaveIP,p=...,u=checksum lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:1774 user:root host:mysql-s-57*/;

REPLACE INTO `travel`.`tmp`(`id`, `order_code`, `order_status`) VALUES ('266', '2020031100000165', '4') /*percona-toolkit src_db:travel src_tbl:tmp src_dsn:P=3306,h=masterIP,p=...,u=checksum dst_db:travel dst_tbl:tmp dst_dsn:P=3306,h=slaveIP,p=...,u=checksum lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:1774 user:root host:mysql-s-57*/;

从库执行上面打印结果的语句修复数据

DELETE FROM `travel`.`tmp` WHERE `id`='265' LIMIT 1;

REPLACE INTO `travel`.`tmp`(`id`, `order_code`, `order_status`) VALUES ('266', '2020031100000165', '4');

执行完成后再次检查数据一致性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PT工具Percona Toolkit的简称,是Percona公司开发的一套用于管理MySQL工具。它包括了一系列功能,比如表中记录归档和清理、在线DDL、检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件等。使用这些工具可以提高MySQL管理和维护的效率。 在安装PT工具之前,需要先安装一些依赖库,比如DBD::mysql和DBI。可以通过以下步骤安装这些依赖库: 1. 下载DBI源码包,并解压缩:wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.XXX.tar.gz && tar -zxvf DBI-XXX.tar.gz && cd DBI-XXX 2. 运行Perl脚本生成Makefile:perl Makefile.PL 3. 编译和安装:make && make install 4. 下载DBD::mysql源码包,并解压缩:wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-XXX.tar.gz && tar -zxvf DBD-mysql-XXX.tar.gz && cd DBD-mysql-XXX 5. 运行Perl脚本生成Makefile:perl Makefile.PL 6. 编译和安装:make && make install 一个PT工具的使用案例是清理数据。例如,使用pt-archiver工具可以删除某个表中指定条件的数据。可以按照以下步骤进行操作: 1. 修改表结构:mysql> alter table test1 modify id int not null primary key auto_increment; 2. 使用pt-archiver工具清理数据pt-archiver --source h=127.0.0.1,D=test,t=test1,u=root,p=bulibuqi... --where 'id<10000' --purge --limit=1 --no-check-charset 3. 检查数据是否删除成功:mysql> select * from test1; 请注意,这只是一个案例,具体使用PT工具的命令和参数可能因实际情况而异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL pt工具包集合(一)](https://blog.csdn.net/weixin_45320660/article/details/115724006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [mysql工具percona-toolkit之安装](https://blog.csdn.net/jc_benben/article/details/52857368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值