gt-checksum是GreatSQL社区开源的一款静态数据库校验修复工具,支持MySQL、Oracle等主流数据库。
MySQL DBA最常用的数据校验&修复工具应该是Percona Toolkit中的pt-table-checksum和pt-table-sync这两个工具,不过这两个工具并不支持MySQL MGR架构,以及国内常见的上云下云业务场景,还有MySQL、Oracle间的异构数据库等多种场景。
GreatSQL开源的gt-checksum工具可以满足上述多种业务需求场景,解决这些痛点。
gt-checksum工具支持以下几种常见业务需求场景:
以上这些场景,都可以利用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.1
# 查看使用帮助
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...]
...
# 数据库授权
# 想要运行gt-checksum工具,需要至少授予以下几个权限
# MySQL端
# 1.全局权限
# a.`REPLICATION CLIENT`
# b.`SESSION_VARIABLES_ADMIN`,如果是MySQL 8.0版本的话,MySQL 5.7版本不做这个要求
# 2.校验数据对象
# a.如果`datafix=file`,则只需要`SELECT`权限
# b.如果`datafix=table`,则需要`SELECT、INSERT、DELETE`权限,如果还需要修复表结构不一致的情况,则需要`ALTER`权限
#
# 假设现在要对db1.t1做校验和修复,则可授权如下
mysql> GRANT REPLICATION CLIENT, SESSION_VARIABLES_ADMIN ON *.* to ...;
mysql> GRANT SELECT, INSERT, DELETE ON db1.t1 to ...;
# Oracle端
# 1.全局权限
# a.`SELECT ANY DICTIONARY`
# 2.校验数据对象
# a.如果`datafix=file`,则只需要`SELECT ANY TABLE`权限
# b.如果`datafix=table`,则需要`SELECT ANY TABLE、INSERT ANY TABLE、DELETE ANY TABLE`权限
# 指定配置文件,开始执行数据校验,示例:
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 11-2,则要下载Oracle 11-2的驱动程序,并使之生效,否则连接Oracle会报错。
从 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
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
shell> DOCKER_BUILDKIT=1 docker build --build-arg VERSION=v1.2.1 -f Dockerfile -o ./ .
shell> cd gt-checksum-v1.2.1
shell> ./gt-checksum -v
gt-checksum version 1.2.1
这就编译完成并可以开始愉快地玩耍了。
截止最新的1.2.1版本中,当表中有多行数据是完全重复的话,可能会导致校验结果不准确,详见 已知缺陷 。
扫码关注微信公众号
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
Activity
Community
Health
Trend
Influence
:Code submit frequency
:React/respond to issue & PR etc.
:Well-balanced team members and collaboration
:Recent popularity of project
:Star counts, download counts etc.