1.介绍
主从一致性主要是通过 Percona-Toolkit 这个工具来实现的,Percona Toolkit 是一组高级的命令行工具,用来管理 MySQL 和系统任务,主要功能包括:
验证主节点和复制数据的一致性
有效的对记录进行归档
找出重复的索引

总结MySQL服务器
从日志和tcpdump中分析查询
问题发生时收集重要的系统信息。

现在,使用这个工具来完成一致性检查和数据同步。
官网:https://www.percona.com/software/mysql-tools/percona-toolkit

2.安装Percona-Toolkit工具
安装的方式有多种,可以编译安装,也可以通过包管理器安装,直接下载rpm包,然后yum进行安装。
文件下载地址:https://www.percona.com/doc/percona-toolkit/2.2/installation.html
wget percona.com/get/percona-toolkit.rpm
yum -y install percona-toolkit.rpm

wget percona.com/get/percona-toolkit.tar.gz
tar -zxvf percona-toolkit.tar.gz && cd percona-toolkit

3.一致性检查
3.1 注意点:
需要创建一个既能登录主库,也能登录从库,而且还能同步数据库的帐号。
只能指定一个host,必须为主库的IP
在检查时会向表加S锁
运行之前需要从库的同步IO和SQL进程是YES状态

3.2 创建检查帐号
mysql>grant select,process,super,replication slave on *.* to 'mysql_check'@'x.x.x.x' identified by '123456';
mysql>flush privileges;

3.3 执行检测(在master上操作)
pt-table-checksum --nocheck-replication-filters --databases=dy_qqopen --replicate=test.checksums --create-replicate-table --host=192.168.5.5 --port 3306 -umysql_check -pLooking_s123 --recursion-method=hosts
参数说明:
--nocheck-replication: 不检查复制过滤器,建议启动。后面可以用--databases来指定需要检查的数据库。
--databases:指定需要被检查的数据库,多个则用逗号隔开
--tables:指定需要被检查的标,多个用逗号隔开。
--replicate:把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--create-replicate-table:创建存放检查信息的数据表,第一次运行需要加,以后就不需要添加了。
--recursion-method:查找 Slave 的方式,有三种, processlist, dsn, hosts
h:Master地址
u:MySQL的检测用户的用户名
p:MySQL检测用户的密码
P:3306, MySQL的端口号

参数说明:
TS: 完成检查的时间
ERRORS:检查时发生错误和警告的数量
DIFFS:0表示一致,1表示不一致,当指定--no-replicate-check时,会一直为0,当指定--replicate-check-onley则会显示不同的信息
ROWS:表的行数。
CHUNKS:被划分到表中的块的数目
SKIPPED:由于错误或警告过大,则跳过块的数目。
TIME:执行的时间。
TABLES:被检查的表名
说明:如果出现不一致的情况,需要进行修复。

3.4 命令错误
问题1:执行命令时提示 "Diffs cannot be detected because no slaves were found. Please read the --recursion-method documentation for information."错误
解决方法:在从服务器/etc/my.cnf配置文件中添加两行,report_host=192.168.5.9(slave_ip) report_port=3306(slave_port)。然后重启 MySQL服务

4. 不一致数据修复
4.1 介绍
使用 pt-table-sync 这个命令来修复。 pt-table-sync 命令介绍:高效的同步 MySQL 表之间的数据,他可以做单向和双向的表数据。也可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。

4.2 修复不一致的数据
pt-table-sync --print --user=mysql_check --password=Looking_s123 h=192.168.5.5,D=dy_qqopen,t=qq_task h=192.168.5.9
参数说明:
--print:打印出修复语句,如果需要修复,将 --print 改成 --execute,会直接执行修复语句,但是建议先使用 print 看一下修复语句,以保证不会出错。
--user:MySQL 检测用户的用户名
--password:MySQL 检测用户的密码
D:目标数据库
t:数据表
h:两个h,第一次出现的是 Master 的 IP ,第二次出现的是 Slave 的地址。