mysql数据一致性检查及修复

时间:2023-03-08 23:21:39
mysql数据一致性检查及修复

percona-toolkit-2.2.20-1.noarch
mysql 5.6.29-log
master:192.168.166.129
slave:192.168.166.131

一、创建数据库校验存放库

CREATE DATABASE IF NOT EXISTS percona CHARACTER SET utf8;

二、建立数据校验用户

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksums'@'192.168.166.129' IDENTIFIED BY 'checksums';
GRANT ALL ON percona.* TO 'checksums'@'192.168.166.129';

三、建立dsn信息存放表,解决从库端口为非3306的问题,如果是多个slave添加多条记录即可

use percona;
CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
INSERT INTO dsns (parent_id,dsn) values(1, "h=192.168.166.131,P=3306");

四、数据一致性校验检查

pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P=3306 --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns --no-check-binlog-format
--replicate #把checksum的信息写入到指定表中
--nocheck-replication-filters #不检查复制过滤器,建议启用
--no-check-binlog-format #只支持statment格式,不检查binlog格式,忽略二进制格式检查
--recursion-method #检查从库的方法,默认是processlist,如果端口为非3306,会无法连接从库,推荐使用dsn方法

五、查看不一致数据

pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P= --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns  --no-check-binlog-format --replicate-check-only
-- 或者在从库执行下面语句,获取不一致数据结果
select * from percona.checksums where master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)

6、修复不一致数据

pt-table-sync --execute --replicate percona.checksums --sync-to-master h=192.168.166.131,P=,u=root,p=xxxxxx

修复数据,需要有update权限,我这里使用root用户,这里的主机为需要修复的从机

7、如果修复了不一致数据,需要再次校验,对比是否已修复

pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P= --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns  --no-check-binlog-format
pt-table-checksum h='192.168.166.129',u='checksums',p='checksums',P= --nocheck-replication-filters --replicate=percona.checksums --recursion-method=dsn=D=percona,t=dsns --no-check-binlog-format --replicate-check-only