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
网友评论