gt-checksum静态数据库校验修复工具

联合创作 · 2023-10-01 00:14

 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版本中,当表中有多行数据是完全重复的话,可能会导致校验结果不准确,详见 已知缺陷

问题反馈


浏览 13
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报