gt-checksum

静态数据库校验修复工具
授权协议 Apache
开发语言 Google Go
所属分类 数据库相关、 数据库管理工具
软件类型 开源软件
地区 不详
投 递 者 汪才
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

 gt-checksum是GreatSQL社区开源的一款静态数据库校验修复工具,支持MySQL、Oracle等主流数据库。

特性


MySQL DBA最常用的数据校验&修复工具应该是Percona Toolkit中的pt-table-checksum和pt-table-sync这两个工具,不过这两个工具并不支持MySQL MGR架构,以及国内常见的上云下云业务场景,还有MySQL、Oracle间的异构数据库等多种场景。

GreatSQL开源的gt-checksum工具可以满足上述多种业务需求场景,解决这些痛点。

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工具来满足。

下载


可以 这里 下载预编译好的二进制文件包,已经在Ubuntu、CentOS、RHEL等多个下测试通过。

如果需要校验Oracle数据库,则还需要先下载Oracle数据库相应版本的驱动程序,并配置驱动程序使之生效。例如:待校验的数据库为Oracle 11-2,则要下载Oracle 11-2的驱动程序,并使之生效,否则连接Oracle会报错。详细方法请见下方内容:下载配置Oracle驱动程序

快速运行


# 不带任何参数
shell> ./gt-checksum
If no parameters are loaded, view the command with --help or -h

# 查看版本号
shell> ./gt-checksum -v
gt-checksum version 1.2.0

# 查看使用帮助
shell> ./gt-checksum -h
NAME:
   gt-checksum - A opensource table and data checksum tool by GreatSQL

USAGE:
   gt-checksum [global options] command [command options] [arguments...]
...

# 指定配置文件,开始执行数据校验,示例:
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


# 使用命令行传参方式执行数据校验
shell> ./gt-checksum -S type=mysql,user=checksum,passwd=Checksum@123,host=172.16.0.1,port=3306,charset=utf8 -D type=mysql,user=checksum,passwd=Checksum@123,host=172.16.0.2,port=3306,charset=utf8 -t test.t2 -nit yes
-- 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 SCOTT.A5
[█                    ]100%  task:       1/1
table SCOTT.A5 checksum complete

** gt-checksum Overview of results **
Check time:  0.29s (Seconds)
Schema  Table   IndexCol        checkMod        Rows    Differences     Datafix
test    t2      id              rows            10,10   no              file

下载配置Oracle驱动程序


如果需要校验Oracle数据库,则还需要先下载Oracle数据库相应版本的驱动程序。例如:待校验的数据库为Oracle 11-2,则要下载Oracle 11-2的驱动程序,并使之生效,否则连接Oracle会报错。

下载Oracle Instant Client

https://www.oracle.com/database/technologies/instant-client/downloads.html 下载免费的Basic或Basic Light软件包。

  • oracle basic client, instantclient-basic-linux.x64-11.2.0.4.0.zip

  • oracle sqlplus, instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

  • oracle sdk, instantclient-sdk-linux.x64-11.2.0.4.0.zip

配置oracle client并生效

shell> unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
shell> unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
shell> unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip
shell> mv instantclient_11_2 /usr/local
shell> echo "export LD_LIBRARY_PATH=/usr/local/instantclient_11_2:$LD_LIBRARY_PATH" >> /etc/profile
shell> source /etc/profile

源码编译

gt-checksum工具采用GO语言开发,您可以自行编译生成二进制文件。

编译环境要求使用golang 1.17及以上版本。

请参考下面方法下载源码并进行编译:

shell> git clone https://gitee.com/GreatSQL/gt-checksum.git
shell> go build -o gt-checksum gt-checksum.go
shell> chmod +x gt-checksum
shell> mv gt-checksum /usr/local/bin

也可以直接利用Docker环境编译,在已经准备好Docker运行环境的基础上,执行如下操作即可:

shell> git clone https://gitee.com/GreatSQL/gt-checksum.git
shell> cd gt-checksum

#构建Docker编译环境
shell> docker build -t gt-checksum .

#查看Docker镜像列表
shell> docker images | grep gt-checksum
gt-checksum                                                       latest    a716d9d018b3   27 minutes ago   1.38GB

#创建一个新容器,编译gt-checksum
shell> docker run -itd --name=gt-checksum gt-checksum

#将编译好的二进制文件copy到宿主机
shell> docker cp gt-checksum:/go/release/gt-checksum-v1.2.0 .
shell> cd gt-checksum-v1.2.0
shell> ./gt-checksum -v
gt-checksum version 1.2.0

这就编译完成并可以开始愉快地玩耍了。

使用文档


版本历史


已知缺陷


截止最新的1.2.0版本中,当表中有多行数据是完全重复的话,可能会导致校验结果不准确,详见 已知缺陷

问题反馈


  • 背景介绍 功能特性 gt-checksum使用 3.1 标准使用案例 3.2 直接在命令行模式下使用 3.3 使用极简配置文件案例 项目信息 经过两年多的努力,GreatSQL社区首款数据校验工具——gt-checksum近期正式开源啦~ gt-checksum 作为GreatSQL社区新增的成员,是一款静态数据库校验修复工具,支持MySQL、Oracle等主流数据库,采用Go语言开发,快来试用吧

  • 使用方法: pt-table-checksum [OPTIONS] [DSN] pt-table-checksum:在主<M>上通过执行校验的查询对复制的一致性进行检查,对比主从的校验值,从而产生结果。DSN指向的是主的地址,该工具的退出状态不为零,如果发现有任何差别,或者如果出现任何警告或错误,更多信息请见官网。 不指定任何参数,会直接对本地的所有数据库的表进行检查。   如果报错: Diffs

  • pt-table-checksum原理见下文 http://www.tuicool.com/articles/ZNn6JbV 默认端口,使用processlist方式做一致性检查 主上赋权,权限同步到slaves上,确保此用户可以在master/slave 上的权限 GRANT SELECT, INSERT, UPDATE, DELETE, PROCESS, SUPER, REPLICATION

  • 原文地址: https://www.cnblogs.com/10087622blog/p/15886345.html [root@10 ~]# ethtool -K eth0 tx-checksumming on //caq:大写的K用来调整feature [root@10 ~]# ethtool -k eth0 //caq:小写的k用来查看featu

  • pt-table-checksum pt-table-checksum:官方地址 说明 用途:验证MySQL主从复制的表数据是否一致。 语法: pt-table-checksum [OPTIONS] [DSN] 通过在主从服务器上执行checksum查询,来对比checksump。如果不一致,则EXIT STATUS的值为非0。如果检测到表的数据不一致,可以通过pt-table-sync工具来同

  • 本文永久地址: http://fuxkdb.com/2017/11/24/Pt-table-checksum%E5%8E%9F%E7%90%86%E6%B5%85%E6%9E%90/ Pt-table-checksum原理浅析 主库建一个表 node1> create table fan(id int) engine=innodb; Query OK, 0 rows affected (0.12

  • CRC校验工具 http://www.metools.info/code/c15.html http://www.ip33.com/crc.html 校验算法: CRC-16 CRC-16/X25 两者貌似不一样 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef unsigned short uint16_t; t

 相关资料
  • 我们可以给组件的 data 指定校验规则。如果传入的数据不符合规则,那么 san 会抛出异常。当组件给其他人使用时,这很有用。 指定校验规则,需要使用 DataTypes 进行声明: import san, {DataTypes} from 'san'; let MyComponent = san.defineComponent({ dataTypes: { name:

  • 本文向大家介绍MySQL数据库表修复 MyISAM,包括了MySQL数据库表修复 MyISAM的使用技巧和注意事项,需要的朋友参考一下 一:MySQL中MyISAM表损坏原因总结: 1、 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。 2、 磁盘损坏。 3、 服务器死机。 4、 mysql 本身的bug 。 二:MySQL中MyISAM表损

  • 本文向大家介绍mysql数据库索引损坏及修复经验分享,包括了mysql数据库索引损坏及修复经验分享的使用技巧和注意事项,需要的朋友参考一下 mysql表索引被破坏的问题及解决 下午上班,惊闻我的dedecms的网站出问题了,访问一看,果然全屏报错,检查mysql日志,错误信息为: Table '.\dedecmsv4\dede_archives' is marked as crashed and

  • 静态库 一、Mach-O下静态库的类型 .a .o文件合集 程序代码的集合,是共享程序代码的一种方式 .framwork 苹果针对.a的一层包装 在Mac OS/iOS平台, Framework实际上是一种打包方式, 将库的二进制文件、头文件和有关的资源文件打包到一起, 方便管理和分发. Framework 可以通俗的理解为封装了共享资源的具有层次结构的文件夹。共享资源可以是 nib文件、国际化字

  • 库是一种软件组件技术,库里面封装了数据和函数。库的使用可以使程序模块化。 Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件)。 Linux通常把库文件存放在/usr/lib或/lib目录下。 linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。 在程序中使用使用静态库和动态库时,他们载入的顺序是不同的。 静

  • 无法使用Java连接SQL server。 使用SQL server management studio时,我可以连接到MFA帐户,但使用src时,我不能连接到MFA帐户。