MySQL非主从环境下数据一致性校验及修复程序

  • 时间:
  • 浏览:0

不还也能 有哪些的问题图片就在于:

但为了尽因为减少此类有哪些的问题图片(比如主从延迟也因为会),特意设计了多个redis队列,目标库多个检查系统程序运行运行,即比如一起去指定检查8个表,源库检查会有8个系统程序运行运行对应,但还也能根据表的写入具体情况,配置另一一三个小多 redis队列(目前是随机入列),10个目标库检查系统程序运行运行,来减少不准确因素。

但站在我的淬硬层 往往来说,不一致的数据会被记录下来,因为不还也能 来太多,人工核对一下;因为较多,就再跑一遍检查,因为两次都会同十根绳子 数据不一致,那都会具体情况了。

所以时需保证相同编号的chunk,起点时需相同,所以想到用队列,存放满源库跑过的所有校验sql,模拟pt工具在目标库重放。考虑到要多系统程序运行运行一起去比较多个表,队列因为吃内存过大,于是使用了redis队列。

底下的配置文件还也能认为是用于控制系统程序运行运行的,你有一种配置文件是指定要校验的源库和目标库信息,以及要检验有哪些表。

整体思路是借鉴pt-table-checksum,从源库批量(即chunk)取出一块数据如2000行,计算CRC32值,同样的的话在目标库运行一遍,结果都存入另一一三个小多多 库,最后检查对应编号的chunk crc值否是一致。知道不一致还不行,得还也能快速方便的修复差异,所以继续根据有有哪些不一致的chunk,去目标库和源库找到不一致的行,是缺失,还是多余,还是被修改了,或者生成修复sql,根据指示否是自动修复。

所以就要用到分页查询,根据(自增或联合)主键、唯一索引,每次limit 2000后升序取最后十根绳子 ,作为下一批的起始。所以要分析表上的键具体情况,组合查询条件。目前仅能检查有主键或唯一所以的表。

配置选项

DO_COMPARE: 运行模式

所以才萌生了参考 pt-table-checksum 自己写了另一一三个小多 :px-table-checksum 。

总会另一一三个小多多多 特殊的需求,比如从阿里云RDS实例迁移到自建mysql实例,它的数据传输服务实现方法是基于表的批量数据提取,加上binlog订阅,但强制row模式会因为pt-table-checksum不还也能 权限把会话临时改成statement。另有一种需求是,整库进行字符集转换:库表定义都会utf8,但应用连接使用了默认的 latin1,要将连接字符集和表字符集统一起去来,不还也能以latin1导出数据,再以utf8导入,你有一种具体情况数据一致性校验,且不说binlog解析系统程序运行运行不支持statement(如canal),新旧库有一种内容不同,pt-table-checksum 算出的校验值也会不一样,失效。

主从环境下数据一致性校验突然会用 pt-table-checksum 工具,它的原理及实施过程完后 写过一篇文章:生产环境使用 pt-table-checksum 检查MySQL数据一致性。或者DBA工作中都会一些针对另一一三个小多 表检查否是一致,而你有一种个多 表之间并不还也能 主从关系,pt工具是基于binlog把在主库进行的检查动作,在从库重放一遍,此时就不适用了。

该python系统程序运行运行基于2.7开发,2.6、3.x上不还也能 测试。使用前时需安装 MySQLdbhotqueue

项目地址:https://github.com/seanlook/px-table-checksum

原文链接地址:http://seanlook.com/2016/11/20/py-mysql-table-checksum-non-replicas/

主系统程序运行运行,运行python px-table-checksum.py 执行一致性检查,但一定了解下面的配置文件选项。

要比较的表和选项,使用全配置化,即不通过命令行的方法指定(原谅命令行参数使用方法会额外增加代码量)。