写点什么

好用的数据校验 & 修复工具 gt-checksum 开源啦

作者:GreatSQL
  • 2023-03-06
    福建
  • 本文字数:2537 字

    阅读完需:约 8 分钟

好用的数据校验&修复工具gt-checksum开源啦
  • GreatSQL 社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。

  • GreatSQL 是 MySQL 的国产分支版本,使用上与 MySQL 一致。

  • 作者: GreatSQL 社区

  • 文章来源:GreatSQL 社区原创


  • 背景介绍

  • 功能特性

  • gt-checksum 使用

  • 3.1 标准使用案例

  • 3.2 直接在命令行模式下使用

  • 3.3 使用极简配置文件案例

  • 项目信息

  • 开源发布会


不用说,看名字也知道,gt-checksum工具是数据校验工具。


没错,gt-checksum 是 GreatSQL 社区新增的成员,它是 一款静态数据库校验修复工具,支持 MySQL、Oracle 等主流数据库,采用 Go 语言开发,今天正式开源。

1. 背景介绍

作为 MySQL DBA,相信应该都听说过 Percona 出品的 pt-table-checksum & pt-table-sync 工具(没听说过的绝对不是合格的 MySQL DBA,嘿嘿),可以用它俩进行数据校验及修复工作,非常好用。


不过,在 MySQL MGR 架构中,或者是当下常见的上云、下云业务中,以及 MySQL、Oracle 间的异构数据等多种场景中,pt 工具并不支持。针对这些需求痛点,我们结合平时遇到的客户需求,开发了 gt-checksum 数据校验 &修复工具,并贡献给 GreatSQL 社区,进行开源,继续促进业内开源生态健康发展。


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


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

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

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

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

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


以上这些场景,都可以利用 gt-chcksum 工具来满足。

2. 功能特性

在正式开源之前,gt-checksum 工具已经在内部经过了十数个版本迭代,可以满足绝大多数场景下的数据校验 &修复需求,尤其是 MySQL、Oracle 间的异构数据库场景。


gt-checksum 工具主要功能特性有:


  • 支持主从复制、MGR 以及 MySQL、Oracle 间的数据校验 &修复;

  • 数据库名、表名设置支持多种正则表达式

  • 支持多种字符集

  • 支持设置表名大小写敏感

  • 支持多种数据校验模式,数据、表结构、索引、分区、外键、存储过程等

  • 支持多种数据校验方式,全量校验,抽样校验和行数校验

  • 支持多种数据修复模式,校验完毕后直接修复或是生成修复 SQL 文件再自行手动处理

  • 支持校验无索引表

  • 支持并发多线程校验

  • 更好支持大表数据校验,效率更高,且基本不会发生 OOM 等问题

3. gt-checksum 使用

3.1 标准使用案例

指定配置文件,开始执行数据校验,示例:


shell> gt-checksum -f ./gc.conf-- gt-checksum init configuration files ---- gt-checksum init log files ---- gt-checksum init check parameter ---- gt-checksum init check table name ---- gt-checksum init check table column ---- gt-checksum init check table index column ---- gt-checksum init source and dest transaction snapshoot conn pool ---- gt-checksum init cehck table query plan and check data --begin checkSum index table db1.t1[████████████████████████████████████████████████████]113%  task:     678/600table db1.t1 checksum complete
** gt-checksum Overview of results **Check time: 73.81s (Seconds)Schema Table IndexCol checkMod Rows Differences Datafixdb1 t1 ol_w_id,ol_d_id,ol_o_id,ol_number rows 5995934,5995918 yes file
复制代码

3.2 直接在命令行模式下使用

设定只校验 db1 库下的所有表,不校验 test 库下的所有表,并设置没有索引的表也要校验


shell> gt-checksum -S type=mysql,user=root,passwd=abc123,host=172.16.0.1,port=3306,charset=utf8 -D type=mysql,user=root,passwd=abc123,host=172.16.0.2,port=3306,charset=utf8 -t db1.* -it test.* -nit yes
复制代码

3.3 使用极简配置文件案例

gt-checksum 还支持极简配置文件模式,最少只需要配置三个参数,即可完成数据校验,例如:


shell> cat gc.conf-simple[DSNs]srcDSN = mysql|pcms:abc123@tcp(172.17.16.1:3306)/information_schema?charset=utf8dstDSN = mysql|pcms:abc123@tcp(172.17.16.2:3306)/information_schema?charset=utf8
[Schema]tables = db1.t1
shell> gt-checksum -f ./gc.conf-simple...
复制代码


注意


  1. 极简配置文件名必须是 gc.conf-simple

  2. 配置文件中仅需指定源和目标端的 DSN,以及要校验的表名即可。


更多使用场景和案例欢迎大家一起来解锁。

4. 项目信息

gt-checksum代码已上传到 gitee 上,项目地址 https://gitee.com/GreatSQL/gt-checksum,欢迎围观、加星,也欢迎来“找茬”,提 patch/issue。

5. gt-checksum 正式开源发布会

gt-checksum开源发布会将在 03 月 06 日 19:00-22:30 举办 :)会议链接:https://meeting.tencent.com/dw/dXYm49HwVx1g


也可扫描下方二维码参与:





Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL 是由万里数据库维护的 MySQL 分支,专注于提升 MGR 可靠性及性能,支持 InnoDB 并行查询特性,是适用于金融级应用的 MySQL 分支版本。


相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL 社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html


技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群



用户头像

GreatSQL

关注

GreatSQL社区 2023-01-31 加入

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。 社区:https://greatsql.cn/ Gitee: https://gitee.com/GreatSQL/GreatSQL

评论

发布
暂无评论
好用的数据校验&修复工具gt-checksum开源啦_greatsql社区_GreatSQL_InfoQ写作社区