检测主从复制数据是否一致及恢复

1. 使用工具 percona-toolkit

  • bin/pt-table-checksum用来检测主从数据的一致性
  • bin/pt-table-sync用来恢复主从数据
    离线安装教程

2. 创建账号

主库执行

-- centos0010是主库的host(ip也行)
GRANT UPDATE,INSERT,DELETE,SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'check'@'centos0010'identified by 'check';

GRANT ALL ON test.* TO 'check'@'centos0010' IDENTIFIED BY 'check';

这个账号,从库也要有,如果主从复制不包含user表,上面两条sql需要在从库也执行

3. 创建校验表

主库执行

CREATE TABLE IF NOT EXISTS percona.checksums (
	db char(64) NOT NULL,
	tbl char(64) NOT NULL,
	chunk int NOT NULL,
	chunk_time float NULL,
	chunk_index varchar(200) NULL,
	lower_boundary text NULL,
	upper_boundary text NULL,
	this_crc char(40) NOT NULL,
	this_cnt int NOT NULL,
	master_crc char(40) NULL,
	master_cnt int NULL,
	tstimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	PRIMARY KEY(db, tbl, chunk),
	INDEX ts_db_tbl (ts, db, tbl)
	)
ENGINE=InnoDB;

同样从库也需要,如果没有配置这个库的主从,需要在从库也执行。

4. 执行命令

主库所在主机执行,host是主库ip

./pt-table-checksum --recursion-method="processlist" --nocheck-binlog-format --nocheck-replication-filters --replicate=percona.checksums --databases=test h=centos0010,u=check,p=check,P=3306

结果

TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
03-23T21:22:39      0      0        3       1       0   0.023 test.user
TS            :完成检查的时间。
ERRORS        :检查时候发生错误和警告的数量。
DIFFS         :0表示一致,大于1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS          :表的行数。
CHUNKS        :被划分到表中的块的数目。
SKIPPED       :由于错误或警告或过大,则跳过块的数目。
TIME          :执行的时间。
TABLE         :被检查的表名。

5. 数据恢复

./pt-table-sync --execute --replicate percona.checksums --sync-to-master  h=192.168.10.2,P=3306,u=check,p='check' --print

6. 常用命令

1. 校验某一张表数据是否完整
./pt-table-checksum --recursion-method="processlist" --nocheck-binlog-format --nocheck-replication-filters --replicate=percona.checksums --databases=test --tables=tb_order h=192.168.10.1,u=check,p='check',P=3306

2. 恢复某一张表数据完整性
./pt-table-sync --execute --replicate percona.checksums --sync-to-master --tables=tb_order h=192.168.10.2,P=3306,u=check,p='check' --print

3. 校验全部表是否完整
./pt-table-checksum --recursion-method="processlist" --nocheck-binlog-format --nocheck-replication-filters --replicate=percona.checksums --databases=test h=192.168.10.1,u=check,p='check',P=3306

4. 恢复所有表的数据完整性
./pt-table-sync --execute --replicate percona.checksums --sync-to-master h=192.168.10.2,P=3306,u=check,p='check' --print

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值