在mysql主从复制环境中,由于各种各样的原因(复制停止、误操作数据及参数修改等),可能引发主从库的数据出现不一致,在这种情况下,就需要对主从库的数据进行校验,并且修复,对于DBa来讲,也应该定期对数据库进行数据校验,以确保主从库的数据是正确的、一致的。本篇将介绍开源工具套件PeRcona ToolkIT的数据校验pt-table-checksum和数据同步pt-table-sync利器。
使用前需先安装需要的软件包:yum install peRl-Time–HiRes peRl-TeRmReadKey peRl-DBD-mysql
用途:
在主库执行,用于检测mysql主、从库数据是否一致。该工具需要使用基于语句的复制,即它会在主库设置BInlog_foRmat=STaTEMEnT,若主库的复制采用基于行模式,使用该工具时需设置选项–no-check-BInlog-foRmat,否则会出错。
语法:
Usage: pt-table-checksum [OPTIOnS] [DSn]
可通过执行pt-table-checksum–help查看对应选项和DSn的具体用法
用法示例:
1)创建测试数据
主库:
从库:
通过主从库的数据可看出,主从库的数据是不一致的,具体为emp表的emp_no=10001记录和dept表的dept_no=’d009’记录不一致。
2)验证某个数据库的主从一致性,若验证多个数据库,则数据库之间用逗号分隔
3)验证某个表的主从一致性,若验证多个数据表,则数据表之间用逗号分隔
输出说明:
TS:完成对表校验和时的时间戳(不包含年份)
ERRORS:校验表时出现错误&告警的数量,表校验时,错误和警告打印到标准错误
DIFFS:从库与主库不同的chunk数量,若指定–no-Replicate-check,该列始终为零,若指定–Replicate-check-only,则纸打印有差异的表
通过上面的演示可以看出,主从库数据出现了不一致,那么,该怎么处理呢?接下来将使用pt-table-sync工具进行数据同步。
用途:
用于高效的同步mysql表数据,参与数据同步的数据库可以是主从数据库,也可以是没有复制关系的数据库间数据同步(通过这种方法可检查不同的数据库中的表数据是否一致)。
语法:
Usage: pt-table-sync [OPTIOnS] DSn [DSn]
用法示例:
参考上面的数据同步逻辑,列举如下示例,下面的示例使用选项–pRint,只是打印,不做实际的执行,若需要执行,则需使用选项–execute,另外须注意的是,在数据同步过程中,对应的表需要有主键,否则同步会出错。
若只有1个DSn信息,出现选项–sync-to-masteR,该DSn是从库信息,连接到主库进行数据同步
若有多个DSn信息,第一个DSn信息是源数据库,将依次同步数据
若指定–sync-to-masteR,该DSn是从库的信息,连接到主库同步数据信息
若不指定–sync-to-masteR,该DSn是主库的信息,查找到从库并连接,同步数据
场景3:场景1和场景2之外的场景
若只有1个DSn信息,且指定–sync-to-masteR,则该DSn是从库信息,连接到主库,查找数据表并通过–databases过滤数据库,同步数据
若有多个DSn信息,并不指定–sync-to-masteR,查找数据表并通过–databases过滤数据库,同步数据
以上,就是数据校验pt-table-checksum和数据同步pt-table-sync工具的讲解,通过这两个工具的有效使用,可提升DBa工作的效率。