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.rpmyum install percona-toolkit.rpm-y

3.一致性检查

3.1 注意点:

  • 需要创建一个既能登录主库,也能登录从库,而且还能同步数据库的帐号。

  • 只能指定一个host,必须为主库的IP

  • 在检查时会向表加S锁

  • 运行之前需要从库的同步IO和SQL进程是YES状态

3.2 创建检查帐号

mysql>grantselect,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.124.20--port3306-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.124.10(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.124.20,D=dy_qqopen,t=qq_task h=192.168.124.10

参数说明:

  • --print:打印出修复语句,如果需要修复,将 --print 改成 --execute,会直接执行修复语句,但是建议先使用 print 看一下修复语句,以保证不会出错。

  • --user:MySQL 检测用户的用户名

  • --password:MySQL 检测用户的密码

  • D:目标数据库

  • t:数据表

  • h:两个h,第一次出现的是 Master 的 IP ,第二次出现的是 Slave 的地址。