gt-checksum 关于gt-checksum gt-checksum - A opensource table and data checksum tool by GreatSQL 用法Usage: gt-checksum --srcDSN DSN --dstDSN DSN --tables TABLESor gt-checksum --config=./gc.conf快速使用案例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/600table db1.t1 checksum complete** gt-checksum Overview of results **Check time: 73.81s (Seconds)Schema Table IndexCol checkMod Rows Differences Datafixdb1 t1 ol_w_id,ol_d_id,ol_o_id,ol_number rows 5995934,5995918 yes file快速使用案例2 设定只校验db1库下的所有表,不校验test库下的所有表,并设置没有索引的表也要校验 ./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,charset=utf8 -t db1.* -it test.* -nit yesgt-checksum特性 MySQL DBA最常用的数据校验&修复工具应该是Percona Toolkit中的pt-table-checksum和pt-table-sync这两个工具,不过这两个工具并不支持MySQL MGR架构,以及国内常见的上云下云业务场景,还有MySQL、Oracle间的异构数据库等多种场景。 GreatSQL开源的gt-checksum工具可以满足上述多种业务需求场景,解决这些痛点。 gt-checksum工具支持以下几种常见业务需求场景:
以上这些场景,都可以利用gt-chcksum工具来满足。 参数选项详解gt-checksum支持命令行传参,或者指定配置文件两种方式运行,但不支持两种方式同时指定。 配置文件可参考(这个模板)[x],模板中包含相关参数的详细解释。 gt-checksum命令行参数选项详细解释如下:
gt-checksum支持极简配置文件工作方式,即只需要最少的几个参数就能工作,例如: #shell> cat gc.conf-simple[DSNs]srcDSN = mysql|pcms:abc123@tcp(172.17.16.1:3306)/information_schema?charset=utf8dstDSN = mysql|pcms:abc123@tcp(172.17.16.2:3306)/information_schema?charset=utf8[Schema]tables = db1.t1注意:
当前DSN定义支持MySQL、Oracle两种数据库。 Oracle的连接串格式为:oracle|user/password@ip:port/sid 例如:srcDSN = oracle|pcms/abc123@172.16.0.1:1521/helowin MySQL的连接串格式为:mysql|usr:password@tcp(ip:port)/dbname?charset=xxx 例如:dstDSN = mysql|pcms:abc123@tcp(172.16.0.1:3306)/information_schema?charset=utf8 注:port默认值是3306,charset默认值是utf8mb4。
和srcDSN一样,也支持MySQL、Oracle两种数据库,DSN字符串格式同srcDSN。 注:port默认值是3306,charset默认值是utf8mb4。
./gt-checksum -S DSN -D DSN -lf gt-checksum.log 案例: shell> gt-checksum -S srcDSN -D dstDSN -t db1.* -lf ./gt-checksum.log
./gt-checksum -S DSN -D DSN -ffn gt-checksum-DataFix.sql 案例: ./gt-checksum -S DSN -D DSN -t db1.* -df file -ffn ./gt-checksumDataFix.sql
可以 这里 下载预编译好的二进制文件包,已经在Ubuntu、CentOS、RHEL等多个下测试通过。 如果需要校验Oracle数据库,则还需要先下载Oracle数据库相应版本的驱动程序,并配置驱动程序使之生效。例如:待校验的数据库为Oracle 11-2,则要下载Oracle 11-2的驱动程序,并使之生效,否则连接Oracle会报错。详细方法请见下方内容:下载配置Oracle驱动程序 。 下载配置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软件包。
源码编译 gt-checksum工具采用GO语言开发,您可以自行编译生成二进制文件。 编译环境要求使用golang 1.17及以上版本。 请参考下面方法下载源码并进行编译: shell> git clone https://gitee.com/GreatSQL/gt-checksum.gitshell> go build -o gt-checksum gt-checksum.goshell> chmod +x gt-checksumshell> mv gt-checksum /usr/local/bin已知缺陷 截止最新的1.2.0版本中,当表中有多行数据是完全重复的话,可能会导致校验结果不准确。 源端有个表t1,表结构及数据如下: mysql> show create table t1\G*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t1` ( `id` float(10,2) DEFAULT NULL, `code` varchar(10) DEFAULT NULL, KEY `idx_1` (`id`,`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;mysql> select * from t1;+-------+------+| id | code |+-------+------+| 1.01 | a || 1.50 | b || 2.30 | c || 3.40 | d || 4.30 | NULL || 4.30 | NULL || 4.30 | NULL || 4.30 | || 4.30 | f || 10.10 | e |+-------+------+10 rows in set (0.00 sec)注意:上述10行数据中,有3行数据是完全一致的。 目标端中同样也有t1表,表结构完全一样,但数据不一样: mysql> select * from t1;+-------+------+| id | code |+-------+------+| 1.01 | a || 1.50 | b || 2.30 | c || 3.40 | d || 4.30 | NULL || 4.30 | || 4.30 | f || 10.10 | e |+-------+------+8 rows in set (0.00 sec)可以看到,目标端中的t1表只有8行数据,如果除去重复数据,两个表是一致的,这也会导致校验的结果显示为一致。 ...** gt-checksum Overview of results **Check time: 0.30s (Seconds)Schema Table IndexCol checkMod Rows Differences Datafixt1 T1 id,code rows 10,8 no file这个问题我们会在未来某个版本中尽快修复。 BUGS可以 戳此 查看 gt-checksum 相关bug列表。 |
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com