mysql校验工具

1、主从数据库上安装pt-table-checksum工具:

wget https://www.percona.com/downloads/percona-toolkit/2.2.17/RPM/percona-toolkit-2.2.17-1.noarch.rpm 
rpm -ivh percona-toolkit-2.2.17-1.noarch.rpm #若存在依赖,可yum安装

2、主从数据库分别进行授权:

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,UPDATE,INSERT,DELETE ON ptcheck.* TO 'checksums'@'master_ip' IDENTIFIED BY 'check';

3、主库上创建库ptcheck,写明对应需要校验的从库及连接信息:

create database ptcheck;use ptcheck;
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=slave_ip,u=checksums,p=check,P=3306");

4、创建校验结果存放表:

 CREATE TABLE `checksums` (
 `db` char(64) NOT NULL,
 `tbl` char(64) NOT NULL,
 `chunk` int(11) NOT NULL,
 `chunk_time` float DEFAULT NULL,
 `chunk_index` varchar(200) DEFAULT NULL,
 `lower_boundary` text,
 `upper_boundary` text,
 `this_crc` char(40) NOT NULL,
 `this_cnt` int(11) NOT NULL,
 `master_crc` char(40) DEFAULT NULL,
 `master_cnt` int(11) DEFAULT NULL,
 `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`db`,`tbl`,`chunk`),
 KEY `ts_db_tbl` (`ts`,`db`,`tbl`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

5、开始主从数据校验(注意ptcheck库需要是主从能同步的库,且校验时主从数据库需要同步无延迟)

pt-table-checksum h='master_ip',u='checksums',p='check',P=3306  --nocheck-replication-filters --replicate=ptcheck.checksums  --databases=voole_vrm --tables=vrm_cpmovieinfo  --no-check-binlog-format --recursion-method=dsn=D=ptcheck,t=dsns

6、如果DIFFS显示非零,则主从数据不一致,可在从库上进行数据差异打印:

pt-table-sync --replicate=ptcheck.checksums --databases=voole_vrm --sync-to-master  h='slave_ip',u='checksums',p='check' --charset=utf8 --print

7、对于从库与主库不一致的数据,通过判断确认需要使从库和主库这些数据一致时,可在从库上执行如下命令恢复从库上差异数据,使主从数据实现一致(修复数据时请注意账号是否有修改权限):

pt-table-sync --replicate=ptcheck.checksums --databases=voole_vrm --sync-to-master  h='slave_ip',u='checksums',p='check' --charset=utf8 --execute

你可能感兴趣的:(mysql校验工具)