暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL、Oracle数据一致性检验工具

原创 DBA实战 2024-09-12
394

gt-checksum 是一个用于检测数据库中数据一致性的工具,主要用于在数据复制、迁移或备份恢复等场景下验证数据的一致性。它可以应用于多种数据库系统,如MySQL、Oracle等。这个工具的主要功能是在两个数据库之间进行数据一致性检查,帮助数据库管理员发现并解决数据不一致的问题。

功能特性

gt-checksum工具支持以下几种常见业务需求场景:

  • MySQL主从复制:主从复制中断后较长时间才发现,且主从间差异的数据量太多,这时候通常基本上只能重建复制从库,如果利用pt-table-checksum先校验主从数据一致性后,再利用pt-table-sync工具修复差异数据,这个过程要特别久,时间代价太大。

  • MySQL MGR组复制:MySQL MGR因故崩溃整个集群报错退出,或某个节点异常退出,在恢复MGR集群时一般要面临着先检查各节点间数据一致性的需求,这时通常为了省事会选择其中一个节点作为主节点,其余从节点直接复制数据重建,这个过程要特别久,时间代价大。

  • 上云下云业务场景:目前上云下云的业务需求很多,在这个过程中要进行大量的数据迁移及校验工作,如果出现字符集改变导致特殊数据出现乱码或其他的情况,如果数据迁移工具在迁移过程中出现bug或者数据异常而又迁移成功,此时都需要在迁移结束后进行一次数据校验才放心。

  • 异构迁移场景:有时我们会遇到异构数据迁移场景,例如从Oracle迁移到MySQL,通常存在字符集不同,以及数据类型不同等情况,也需要在迁移结束后进行一次数据校验才放心。

  • 定期校验场景:作为DBA在维护高可用架构中为了保证主节点出现异常后能够快速放心切换,就需要保证各节点间的数据一致性,需要定期执行数据校验工作。


安装

[root@sql-audit-20230526 gt-checksum]# tar xvf gt-checksum-1.2.1-linux-x86-64.tar.gz [root@sql-audit-20230526 gt-checksum]# mv gt-checksum-1.2.1-linux-x86-64/ gt-checksum[root@sql-audit-20230526 gt-checksum]# cd gt-checksum/

账号权限

全局权限,如果是MySQL 8.0版本的话,MySQL 5.7版本不做这个要求mysql> GRANT REPLICATION CLIENT, SESSION_VARIABLES_ADMIN ON *.* to ...;表级别的:mysql> GRANT SELECT, INSERT, DELETE ON db1.t1 to ...;

配置参数修改

[root@sql-audit-20230526 gt-checksum]# vim gc.conf   tables = incredb.*chanRowCount = 10000lowerCaseTableNames = yessrcDSN = mysql|in**r:gNq***klw@tcp(172.16.0.1:3306)/information_schema?charset=utf8mb4dstDSN = mysql|inc**r:gNqi9Y**lw@tcp(172.16.0.3:3306)/information_schema?charset=utf8mb4
要注意的参数:[Repair]; 数据修复方式,支持 file/table 两种方式; file,生成数据修复SQL文件; table 直接在线修复数据datafix = file

启动

启动:[root@sql-audit-20230526 gt-checksum]# ./gt-checksum -f gc.confwushouyang  reg_input_bind_info         id                rows      45,45          no           file   wushouyang  open_info                   open_id,platform  rows      147,147        no           file   wushouyang  auth_interface              id                rows      2,2            no           file   wushouyang  user_import_log             id                rows      388,388        yes          file   wushouyang  mac_bw_list                 id                rows      23,23          no           file 
出现yes代表有差异。

参数介绍

; gt-checksum 配置文件参考; 定义源、目标数据源; 目前只支持MySQL、Oracle两种数据源
[DSNs];oracle的连接串格式为:oracle|user/password@ip:port/sid;例如:srcDSN = oracle|scott/tiger@172.16.0.1:1521/helowin
;mysql的连接串格式为:mysql|usr:password@tcp(ip:port)/dbname?charset=xxxsrcDSN = mysql|in**er:gNq**lw@tcp(172.16.0.1:3306)/information_schema?charset=utf8mb4dstDSN = mysql|in**er:gN**lw@tcp(172.16.0.2:3306)/information_schema?charset=utf8mb4
; 定义校验数据对象[Schema]; 选项tables用来定义校验数据表对象,支持通配符"%"和"*"; 例如:; *.* 表示所有库表对象(MySQL不包含 information_schema\mysql\performance_schema\sys); test.* 表示test库下的所有表; test.t% 表示test库下所有表名中包含字母"t"开头的表; db%.* 表示所有库名中包含字母"db"开头的数据库中的所有表; %db.* 表示所有库名中包含字母"db"结尾的数据库中的所有表;; 如果已经设置为 "*.*",则不能再增加其他的规则,例如:设置 "*.*,pcms%.*" 则会报告规则错误; 如果 table 和 ignore-tables 设置的值相同的话也会报告规则错误
tables = incredb.*ignore-tables =
; 设置是否检查没有索引的表,可设置为:yes/no,默认值为:nocheckNoIndexTable = no
; 设置是否忽略表名大小写,可设置为:yes/no; 当为no时,统一使用大写表名;当为yes时,会按照配置的大小写进行匹配; 默认值为:nolowerCaseTableNames = yes
; 其他校验规则[Rules]; 数据校验并行线程数parallel-thds = 10
; 设置每次检索多少条数据进行校验,默认值:10000chanRowCount = 10000
; 设置校验队列深度,默认值:100queue-size = 100
; 设置数据校验模式,支持 count/rows/sample 三种模式,默认值为:rows; count 表示只校验源、目标表的数据量; rows 表示逐行校验源、目标数据; sample 表示只进行抽样数据校验,配合参数ratio设置采样率checkMode = rows
; 当 checkMode = sample 时,设置数据采样率,设置范围1-100,用百分比表示,1表示1%,100表示100%,默认值:10ratio = 10
; 设置数据校验对象,支持 data/struct/index/partitions/foreign/trigger/func/proc,默认值为:data; 分别表示:行数据/表结构/索引/分区/外键/触发器/存储函数/存储过程checkObject = data
;设置表结构校验规则,当checkObject为struct时才会生效[Struct]; 设置struct校验时的校验模式,可设置为:strict/loose,为strict时,则会严格匹配列的所有属性,为loose时,则为宽松模式只匹配列名,默认值为:strictScheckMod = strict
; 设置struct校验时是否校验列的顺序,可设置为:yes/no,设置为yes,则会按照源端的列的正序进行校验,默认值为:yesScheckOrder = yes
; 设置修复列的属性及顺序的依据原则,可设置为src/dst,设置为src则按照源端的列属性进行修复,默认值为:src; 当缺少列时,修复语句会按照源端的列数据类型生成ScheckFixRule = src
; 设置日志文件名及等级[Logs]; 设置日志文件名,可以指定为绝对路径或相对路径log = ./log.log
; 设置日志等级,支持 debug/info/warn/error 几个等级,默认值为:infologLevel = info
; 设置数据修复方案[Repair]; 数据修复方式,支持 file/table 两种方式; file,生成数据修复SQL文件; table 直接在线修复数据datafix = file
; 修复事务数,即单个事务包含多少个dml语句,默认值为:100fixTrxNum = 100
; 当 datafix = file 时,设置生成的SQL文件名,可以指定为绝对路径或相对路径; 当 datafix = table 时,可以不用设置 fixFileName 参数fixFileName = ./datafix.sql

总结

gt-checksum 是一个非常有用的工具,它可以帮助数据库管理员在多种情况下验证数据的一致性,从而确保数据的准确性和完整性。这对于确保业务连续性、提高数据可靠性至关重要。然而,在使用过程中,需要注意其对系统性能的影响以及确保数据的安全性。通过合理规划使用时间和充分理解工具的功能及局限性,可以最大化gt-checksum的价值,从而提升数据库管理的水平。


 欢迎关注我的公众号【DBA实战】,一起学习新知识!
——————————————————————

——————————————————————  


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论