| gt-checksum 关于gt-checksum gt-checksum - A opensource table and data checksum tool by GreatSQL用法 Usage:gt-checksum --srcDSN DSN --dstDSN DSN --tables TABLES orgt-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 yes gt-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软件包。 
  LD_LIBRARY_PATH" >> /etc/profileshell> source /etc/profile 源码编译 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


