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