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

news/2024/11/17 1:33:29/
  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 标准使用案例
    指定配置文件,开始执行数据校验,示例:


```c```powershell
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.t1shell> gt-checksum -f ./gc.conf-simple
...

注意:
极简配置文件名必须是 gc.conf-simple。
配置文件中仅需指定源和目标端的DSN,以及要校验的表名即可。
更多使用场景和案例欢迎大家一起来解锁。

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

http://www.ppmy.cn/news/60056.html

相关文章

JQuery实现自定义滚动条

在页面中虽然可以通过CSS修改滚动条的样式,但是部分属性是无法自己修改和设置的,而且不同浏览器存在兼容问题,因此通过JS来实现滚动条在自定义滚动条的环境下也是有必要的。 接下来,我们来实现上图两种情况下滚动条的实现。 一、页面搭建 1.…

Redis高级——批处理优化

2、批处理优化 2.1、Pipeline 2.1.1、我们的客户端与redis服务器是这样交互的 单个命令的执行流程 N条命令的执行流程 redis处理指令是很快的,主要花费的时候在于网络传输。于是乎很容易想到将多条指令批量的传输给redis 2.1.2、MSet Redis提供了很多Mxxx这样的…

跟着我学 AI丨让计算机看懂世界

计算机视觉是一种利用计算机和数学算法来处理、分析和识别数字影像的技术。这项技术在近年来得到了快速发展,应用范围也越来越广泛,它已经成为了人工智能领域中的重要分支之一。 技术原理 计算机视觉技术主要涉及图像处理、模式识别和机器学习等方面的技…

Java8中DateTimeFormatter真的是线程安全的吗?

文章目录 [toc] 1.背景2.解决办法2.1办法一:换姿势或者升级JDK的版本2.1办法二:更换文件名称字生成策略 Java8中DateTimeFormatter真的是线程安全的吗? 答案是否定的 1.背景 由于之前写了一个旷世的ocr的服务,接入了旷世的FaceID的人脸比对…

RN系统精讲-----基础了解

原生基础 安装SDK与Tools preference > appearance > systemSetting > Android sdk 如何连接设备,以及开发中的常用的adb命令 USB连接设备 adb devices 查看连接设备 wifi网络连接设备 adb connect ip(手机自己的ip地址,可以通过…

基于J2EE的B2C电子商务系统开发与实现

摘要 当今社会,科学技术突飞猛进,知识经济初见端倪。电子商务作为一种新型的贸易方式,极大地促进了全球经济贸易的发展,同时也正在改变人们的生活方式和思想观念。电子商务是指整个贸易活动实现电子化,交易各方以电子交易方式而进行的商业交易。世界贸易组织电子商务专题报告定…

python 统计pdf页数

python 统计pdf页数 import os import PyPDF2 import sys, jm, traceback from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QAction from PyQt5 import QtCore, QtGui, QtWidgets def get_all_file_by_type(path, type(), get_all_dirs True): # 获得以…

【华为OD机试 2023最新 】统一限载货物数最小值(C语言题解 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析代码思路C语言题目描述 火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车(K辆干货中转车,K辆湿货中转车)。 货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依…