关于数据库:好用的数据校验修复工具gtchecksum开源啦

44次阅读

共计 3239 个字符,预计需要花费 9 分钟才能阅读完成。

  • GreatSQL 社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。
  • GreatSQL 是 MySQL 的国产分支版本,应用上与 MySQL 统一。
  • 作者:GreatSQL 社区
  • 文章起源:GreatSQL 社区原创

    1. 背景介绍
    1. 性能个性
    1. gt-checksum 应用
    • 3.1 规范应用案例
    • 3.2 间接在命令行模式下应用
    • 3.3 应用极简配置文件案例
    1. 我的项目信息
    1. 开源发布会

不用说,看名字也晓得,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/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。

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 社区助手 微信好友,发送验证信息 加群

正文完
 0