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

GreatSQL社区首款开源工具亮相丨数据校验&修复工具gt-checksum开源啦!

万里数据库 2023-05-06
378
  • 1. 背景介绍
  • 2. 功能特性
  • 3. gt-checksum使用
    • 3.1 标准使用案例
    • 3.2 直接在命令行模式下使用
    • 3.3 使用极简配置文件案例
  • 4. 项目信息

经过两年多的努力,GreatSQL社区首款数据校验工具——gt-checksum近期正式开源啦~
gt-checksum 作为GreatSQL社区新增的成员,是一款静态数据库校验修复工具,支持MySQL、Oracle等主流数据库采用Go语言开发,快来试用吧,项目地址:https://gitee.com/GreatSQL/gt-checksum。

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/600
    table db1.t1 checksum complete


    ** gt-checksum Overview of results **
    Check time: 73.81s (Seconds)
    Schema Table IndexCol checkMod Rows Differences Datafix
    db1 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,char
      set=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=utf8
        dstDSN = 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。


        生态朋友圈“+1”!GreatDB/GreatSQL+龙蜥共筑技术基础底座
        联合评测 | GreatSQL开源数据库在DapuStor Roealsen5 NVMe SSD中的应用探索
        重磅丨生态共荣——万里数据库推动GreatSQL携手openEuler   共建数据库产业生态

        关于万里数据库


        北京万里开源软件有限公司(简称“万里数据库”)成立于 2000 年,是专注于国产自主可控数据库产品研发的国家高新技术企业,拥有发明专利、软件著作权百余项。


        万里数据库的技术底蕴源自对底层核心代码的掌控,产品始终坚持以“极致稳定、极致性能、极致易用”为目标,经过20余年的研发经验积累,产品在功能、性能、稳定、易用等方面均处于行业领先水平,广泛应用于金融、运营商、能源、政府、交通等行业重要业务系统中的超 1000个业务场景,得到了用户和市场的认可与肯定。


        2021 年,公司创立 GreatSQL 开源社区,通过对 MySQL技术的优化,目前已成长为国内最主要的MySQL 技术开源分支之一。


        极致稳定  极致性能  极致易用




        “在看”点一下,万里早知道

        文章转载自万里数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论