好用的数据校验&修复工具gtchecksum开源啦!
不用说,看名字也知道,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
工具支持以下几种常见业务需求场景:
- MySQL主从复制:主从复制中断后较长时间才发现,且主从间差异的数据量太多,这时候通常基本上只能重建复制从库,如果利用 pt-table-checksum 先校验主从数据一致性后 ,再利用 pt-table-sync 工具修复差异数据,这个过程要特别久,时间代价太大。
- MySQL MGR组复制:MySQL MGR因故崩溃整个集群报错退出,或某个节点异常退出,在恢复MGR集群时一般要面临着先检查各节点间数据一致性的需求,这时通常为了省事会选 择其中一个节点作为主节点,其余从节点直接复制数据重建,这个过程要特别久,时间代价大。
- 上云下云业务场景:目前上云下云的业务需求很多,在这个过程中要进行大量的数据迁移及校验工作,如果出现字符集改变导致特殊数据出现乱码或其他的情况,如果数据迁 移工具在迁移过程中出现bug或者数据异常而又迁移成功,此时都需要在迁移结束后进行一次数据校验才放心。
- 异构迁移场景:有时我们会遇到异构数据迁移场景,例如从Oracle迁移到MySQL,通常存在字符集不同,以及数据类型不同等情况,也需要在迁移结束后进行一次数据校验才 放心。
- 定期校验场景:作为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