mysql 表不存在_Mysql 如何使用pt-table-checksum确定主从数据一致

Mysql 如何确定主从数据一致

Master 库上创建库和表

create database percona;

CREATE TABLE `percona`.`dsns` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`parent_id` int(11) DEFAULT NULL,

`dsn` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

);

主库上创建授权用户

grant all privileges on *.* to 'checksum'@'10.106.216.%' identified by '123456';

插入从库数据到dsn表中去

use percona;

insert into percona.dsns(dsn) values('h=10.106.216.182,P=3307,u=checksum,p=123456');

参数解释

--nocheck-replication

忽略replication-do-db规则

--no-check-binlog-format

不检查复制的binlog模式,要是binlog模式是ROW,则会报错。

--replicate

选择哪个库下创建checksums表,并将数据写入到表中

--ignore-tables

忽略某张表

--replicate-check-only

结果只显示数据不一致的表

--create-replicate-table

首次运行时需要添加,创建checksum表,若不指定需要手动创建表,

--databases=,-d

要检查的数据库,逗号分隔。用脚趾头想也知道

--databases-regex

正则匹配要检测的数据库

--ignore-databases[-regex]

忽略检查的库。Filter选项

--tables=,-t

要检查的表,逗号分隔。如果要检查的表分布在不同的db中,可以用--tables=dbname1.table1,dbnamd2.table2的形式。同理有--tables-regex,--ignore-tables,--ignore-tables-regex。

--replicate

指定的checksum表

--no-check-replication-filters

表示不需要检查 Master 配置里是否指定了 Filter。 默认会检查,如果配置了 Filter,如 replicate_do_db,replicate-wild-ignore-table,binlog_ignore_db 等,在从库checksum就与遇到表不存在而报错退出,所以官方默认是yes(--check-replication-filters)但我们实际在检测中时指定--databases=,所以就不存在这个问题,干脆不检测

recursion-method

发现从库的方式 指定复制检查的方式,默认情况下使用SHOW PROCESSLIST,如果非标准的3306端口,就使用SHOW SLAVE HOSTS的方式,推荐使用dsn方式,手动指定,比如下面使用 dsn

recursion-method=dsn=h=10.106.216.182,D=pt,t=dsns 使用 dsn来指定slave h 为ip地址 D 数据库 t 为表

recursion-method=dsn=t=percona.dsns,h=10.106.216.182,P=3307,u=checksum,p=123456

--replicate-check-only

只显示不一致的表

输出结果解释

· TS :完成检查的时间戳。

· ERRORS :检查时候发生错误和警告的数量。

· DIFFS :不一致的chunk数量。当指定 --no-replicate-check 即检查完但不立即输出结果时,会一直为0;当指定 --replicate-check-only 即不检查只从checksums表中计算crc32,且只显示不一致的信息(毕竟输出的大部分应该是一致的,容易造成干扰)。

· ROWS :比对的表行数。

· CHUNKS :被划分到表中的块的数目。

· SKIPPED :由于错误或警告或过大,则跳过块的数目。

· TIME :执行的时间。

· TABLE :被检查的表名

使用举例

1. 只检查test库

pt-table-checksum -S /data/3306/mysql.sock h='10.106.216.182',u='checksum',p='123456',P=3306 -d test --no-check-binlog-format --replicate=percona.checksumResult --recursion-method=dsn=t=percona.dsns,h=10.106.216.182,P=3307,u=checksum,p=123456

2b9ccd1e73c60d019851b149f8492101.png

SELECT * FROM percona.checksumResult;

4b3efacabc9c7f2d208374e23f3ea255.png

在从库3307上修改test.a 表

update test.a

set `name`=concat(`name`,'_g');

4b7dc8f1e69101e8a79eeee04ee045b3.png
836f9f8588e0da0579a01145c5c03f62.png

再次检查库 看看是否能体现出差异来

pt-table-checksum -S /data/3306/mysql.sock h='10.106.216.182',u='checksum',p='123456',P=3306 -d test --no-check-binlog-format --replicate=percona.checksumResult --recursion-method=dsn=t=percona.dsns,h=10.106.216.182,P=3307,u=checksum,p=123456

f53e74a1595fe88ed1a6ecfd076b3a7f.png

pt-table-checksum -S /data/3306/mysql.sock h='10.106.216.182',u='checksum',p='123456',P=3306 --replicate-check-only -d test --no-check-binlog-format --replicate=percona.checksumResult --recursion-method=dsn=t=percona.dsns,h=10.106.216.182,P=3307,u=checksum,p=123456

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值