Releases: GreatSQL/gt-checksum
Releases · GreatSQL/gt-checksum
gt-checksum v1.3.0
08 Apr 01:26
Compare
Sorry, something went wrong.
No results found
gt-checksum v1.3.0下载列表
Changelog
gt-checksum v1.3.0版本更新说明 ,主要变化有:
[功能新增]: 新增在 checkObject=data 模式下支持只校验部分字段功能,新增 columns 参数用于设置校验字段列表,该参数支持不同表名、字段名映射。支持同名列和源端→目标端列名映射;只比较选中的业务列,存在差异时生成 UPDATE 修复SQL;通过 extraRowsSyncToSource 参数控制是否生成 DELETE;当源端数据更多时生成 columns-advisory.<schema>.<table>.sql 文件提示人工介入处理。(issue #I6KGOJ #I6KGXF)
[功能新增]: checkObject=struct 模式新增 VIEW(视图)支持(仅限 MySQL→MySQL);自动识别 tables 中的视图对象并比对定义与列元数据,差异时输出 ObjectType=view,修复建议以 advisory 形式写入 fixsql 文件,checkObject=data 模式会自动跳过视图对象。(issue #I899YZ)
[功能新增]: 新增结果自动导出为 CSV 文件能力;新增参数 resultExport(OFF / csv,默认 csv)和 resultFile(自定义导出路径,默认输出到 result/ 目录),并新增 terminalResultMode(all / abnormal,默认 all)控制终端是否只显示异常结果;以上参数均支持 CLI 覆盖。(issue #I6KMQF)
[功能新增]: repairDB 新增 logbin(ON / OFF,默认 ON),可控制修复时是否写入 binlog。
[功能优化]: 表结构修复在识别到“兼容的列重命名”场景时,改用 CHANGE COLUMN 代替 DROP COLUMN + ADD COLUMN,尽量保留列数据并减少高风险 DDL。
[功能优化]: 表级 charset/collation 修复语句统一显式带上 COLLATE,降低跨版本迁移时被目标端默认排序规则偷偷改写的概率。
[功能优化]: 移除 fixFilePerTable 参数,统一为“每对象独立修复文件”输出模式;fixsql 文件命名规则统一为 type.schema.object.sql,fixFileDir 默认值同步调整为固定目录 fixsql。
[问题修复]: 修复 tables / ignoreTables 参数误用部分通配符 *(如 sbtest.t*)时静默产生错误结果的问题;现在会在参数校验阶段直接报错,并提示改用 %。
[问题修复]: 修复表不存在时结果中的 CheckObject 被错误写成 struct 的问题;同时修复 checkObject=struct 模式下源端和目标端表都不存在时输出重复记录的问题。
二进制包
Packages
Size
md5
gt-checksum-1.3.0-5b49ccb-linux-x86_64.tar.xz
43M
23468d4949574cdb8bd58beb2e13cd21
gt-checksum-1.3.0-5b49ccb-linux-x86_64-minimal.tar.xz
12M
aa4ee5fa6ab7bbb110d0b73ae45164ac
gt-checksum-1.3.0-5b49ccb-linux-aarch64.tar.xz
42M
c0db443d2a1f0fe5dd374defcb4d275b
gt-checksum-1.3.0-5b49ccb-linux-aarch64-minimal.tar.xz
11M
20469ca6cadcfb35a54688df6b9c9a4a
gt-checksum v1.2.5
01 Apr 02:52
Compare
Sorry, something went wrong.
No results found
gt-checksum v1.2.5下载列表
Changelog
gt-checksum v1.2.5版本更新说明 ,主要变化有:
[功能新增]: 新增 MariaDB -> MariaDB 双端全模式支持(data/struct/routine/trigger),覆盖 10.0、10.1、10.2、10.3、10.4、10.5、10.6、10.11、11.4、11.5、12.3 系列,仅支持升级方向(src ≤ dst);struct fix 隐藏索引使用 IGNORED 语法,COMPRESSED/PERSISTENT 等 MariaDB 原生列属性在目标端保留;各系列特性能力(JSON、不可见列、函数式索引、CHECK 约束强制执行等)按实际引入版本自动门控。
[功能新增]: 新增 MySQL 5.6/5.7/8.0/8.4 同版本及升级链路支持,覆盖 data、struct、routine、trigger 四种校验模式;downgrade 或不支持的版本组合会在启动阶段直接拒绝执行。
[功能新增]: 扩展 MariaDB 10.x+ / 12.3+ -> MySQL 8.0/8.4 支持至全部四种 checkObject 模式;新增参数 mariaDBJSONTargetType 支持 MariaDB JSON alias 改写为 JSON、LONGTEXT 或 TEXT;支持 uca1400 -> uca0900 collation 自动映射,减少跨版本误报。
[功能优化]: 统一结构语义比较与风险分级,将 CHECK、显示宽度、utf8/utf8mb3、ZEROFILL、ROW_FORMAT、默认 collation 漂移等差异收敛为 warn-only / advisory-only 分层输出;补齐 routine / trigger charset 元数据三维度比对;checkObject=data 新增 DSN charset 一致性预检,DDL 差异表稳定保留并显示 DDL-yes。
[测试完善]: 新增 shouldCompareTriggerMetadata/shouldCompareRoutineMetadata 单元测试 9 个,覆盖 MariaDB→MariaDB、MySQL→MariaDB、MySQL→MySQL、MariaDB→MySQL 8.0/8.4/5.7 各路径;新增 BuildTargetColumnRepairPlan 的 MariaDB→MariaDB 单元测试 4 个,覆盖 COMPRESSED/PERSISTENT 属性保留与剥除回归;补充 MariaDB→MariaDB 版本策略测试 15 个。
[测试完善]: 新增 tablePatternHasUnsupportedStar 单元测试 6 个(inputArg/checkParameter_test.go),覆盖部分 * 检测、合法模式放行、映射目标侧 * 检测、双侧均含 *、合法 db.* 全量通配符映射、空字符串安全性。
[测试完善]: MySQL 修复 SQL 生成路径新增 20 个单元测试,覆盖标识符引用(普通/含空格/含反引号/保留字)、ADD/DROP 索引、schema/table 名转义、外键名转义、routine/trigger DROP 转义、normalizeAlterOperationContent 正则提取等场
景;Oracle 修复 SQL 生成路径新增 12 个单元测试,覆盖 oracleIdentifier 语义(简单大写裸名、小写→大写、含空格加双引号、已引用保留、内部双引号转义)、DROP/ADD 索引 Oracle 语法正确性、FixAlterIndexSqlGenerate 原样透传等场景。
[测试完善]: 新增 EvaluateDataCheckPreflight 回归测试 6 个(actions/data_check_preflight_test.go),覆盖源端表缺失、双端表缺失、空检查列表(Fatal)、有效表(Proceed)、混合有效/异常(Proceed)、invisible 列不匹配(SkipChecksum)等场景,防止 data 模式 preflight 回归。
[问题修复]: 修复 tables / ignoreTables 参数使用不支持的部分通配符 *(如 sbtest.t*)时静默产生错误结果的问题;现在在参数校验阶段快速失败,打印明确提示信息(如 use '%' instead, e.g. sbtest.t%)并退出;同时覆盖映射目标侧(如 db1.t%:db2.t* 中的 db2.t*)以及 ignoreTables 参数。
[问题修复]: 修复 checkObject=data 或 checkObject=struct 模式下,当指定的表在源端或两端均不存在时,输出结果的 CheckObject 列被硬编码为 struct 而非用户实际配置值的问题;现在所有不存在表分支均正确输出用户配置的 checkObject 值。
[问题修复]: 修复 checkObject=struct 模式下,当源端和目标端表均不存在时输出重复行的问题;根因为 TableColumnNameCheck 已将不存在的表追加到 pod 列表,而 Struct() 中的去重逻辑未感知这些 pod;修复方案为在调用 TableColumnNameCheck 前对 pod 快照,并将新增 pod 的表键预填充到去重集合中,防止重复创建。
[问题修复]: 修复多类结构比较误报(CHECK 括号噪音、主键 canonical key 残余、映射场景目标表名错误、collation advisory 重复输出等),以及 MySQL 5.6/5.7 查询 INFORMATION_SCHEMA.STATISTICS.IS_VISIBLE 的低版本兼容问题和 checkObject=data DDL-yes 链路结果丢失问题。
[问题修复]: 修复 DSN charset 参数提取不完整、MariaDB 源端全局权限预检查误判,以及 struct / routine / trigger 模式连接池过大导致的 Too many connections 问题(#IEYE7P)。
[问题修复]: 修复 checkObject=data 模式下连接池大小不足导致数据校验 hang 住的问题:data 模式下 queryTableDataSeparate 与 AbnormalDataDispos 两条并发 pipeline 同时运行,单侧峰值连接需求约为 parallelThds*2 + 2;将单
侧连接池下限从 parallelThds + 2 调整为 parallelThds*2 + 4(最低 8),覆盖两阶段并发场景。
[问题修复]: 修复连接池 Get() 持锁阻塞死锁及关闭竞态:Get() 原在持有 mutex 时阻塞等待 channel,导致 Put() 无法归还连接;同时 Close() 在 Get() 阻塞期间关闭 channel 后,Get() 会返回 nil 连接并错误递增计数。修复:将 channel 等待移至 mutex 释放后,改用两值接收检测 channel 关闭,并将 Close() 中 p.close = true 移至 close(p.conns) 之前。
[问题修复]: 修复 MySQL 修复 SQL 中索引名、schema/table 名、外键名、routine 名、trigger 名未使用反引号转义的问题;当对象名包含空格、连字符、反引号或 MySQL 保留字时,生成的 ALTER TABLE 语句会导致执行失败;新增 mysqlQuoteIdent() 函数统一处理所有标识符引用,并以正则 alterTablePrefixRe 替换脆弱的 strings.SplitN 提取方式,消除 schema/table 名含空格时的解析错误。
[问题修复]: 修复 Oracle 修复 SQL 使用错误 DDL 语法的问题;原实现对索引 DROP/ADD 均沿用 MySQL ALTER TABLE 语法,在 Oracle 上无法执行;改为:DROP 索引使用独立 DROP INDEX schema.name; 语句,ADD 索引使用 CREATE [UNIQUE] INDEX schema.name ON schema.table (cols); 语句;同时修复 oracleIdentifier() 语义:简单 ASCII 标识符返回大写裸名(无引号),避免加双引号后 Oracle 以大小写敏感方式查找对象导致 ORA-00942。
二进制包
Packages
Size
md5
gt-checksum-1.2.5-d5eb39c-linux-x86_64.tar.xz
43M
af69cd584af01212175cf3ab14940774
gt-checksum-1.2.5-d5eb39c-linux-x86_64-minimal.tar.xz
12M
20afc386b3ef24fb4d93afedd72ccc90
gt-checksum-1.2.5-d5eb39c-linux-aarch64.tar.xz
42M
83738bdf7c2a6b5c5ab778108997f45e
gt-checksum-1.2.5-d5eb39c-linux-aarch64-minimal.tar.xz
11M
118bc4ff8b2fff4d18c87735b9a41fa8
gt-checksum v1.2.4
01 Apr 02:50
Compare
Sorry, something went wrong.
No results found
gt-checksum v1.2.4下载列表
Changelog
gt-checksum v1.2.4版本更新说明 ,主要变化有:
支持Oracle=>MySQL的单向数据校验和修复,目前支持NUMBER/CHAR/NCHAR/VARCHAR2/FLOAT/DECIMAL/DATE/TIMESTAMP/CLOB等多个常用类型
新增Oracle 随机数据加载工具oracle_random_data_load
配置文件中去掉"[DSNs],[Schema]"等一级标签
配置文件中存在重复配置参数时,只读取最后一条
将fixFileName更名为fixFileDir,用于自定义修复SQL文件存放目录;该目录名以"fixsql-时间戳",会自动创建;并且当该目录不为空时会报错退出
新增参数fixFilePerTable,设置为ON时,针对每个表生成独立的SQL文件,并且按照fixTrxNum切分成多个子文件,便于并行修复;默认值为OFF,即所有修复SQL语句都合并到一个文件中
新增repairDB程序,读取gc.conf配置参数,读取fixFileDir目录下所有.sql文件,完成并行修复数据库;也可以自行指定修复SQL文件目录,例如 repairDB ./my-fixsql-dir。在某个测例中,共有1218
个fixsql文件,24301776行SQL语句,所有文件共6.5GB,参数parallelThds=4/chunkSize=20000/fixTrxNum=20000,修复耗时9m43.936s,表现相当优异
新增sqlWhere参数,用于定义校验数据时的WHERE条件,对于大表中只有小部分数据不一致的场景校验效率有极大提升;默认值为空字符串"",表示不添加WHERE子句条件,校验所有数据行
支持没有任何索引(包括隐藏主键my_row_id)的表数据校验和修复
程序运行时,检查 logFile 文件是否为空,如果不为空则将其重命名为 logFile-时间戳,例如 gt-checksum.log 重命名为 gt-checksum.log-20230801100000
支持读取gc.conf配置文件时,忽略配置参数中的多余空格
新增DDL不一致检测功能:当源端与目标端DDL定义不一致时,校验报告的Diffs列显示为"DDL-yes",准确区分DDL差异和数据差异
支持MySQL 8.0 GIPK(自动生成的不可见主键my_row_id)场景下的DDL差异识别
新增索引列目标端存在性验证,当索引列(如my_row_id)在目标端不存在时,提前标记DDL不一致并跳过无意义的数据比较
优化INSERT和DELETE语句合并方案,分别设置不同上限,避免DELETE语句影响太多行数据而产生太久锁等待,反倒影响修复效率
新增参数fixTrxSize(默认4MB)用于限制单个fixsql文件大小;新增insertSqlSize和deleteSqlSize(单位KB)用于分别控制INSERT和DELETE合并SQL大小
优化内存使用:当有大量数据存在差异时,运行耗时降低12%的前提下,最高内存使用降低96%,效果显著
新增参数showActualRows表示是否统计各表精确行数并优化相应的查询SQL,可设置为 [ON | OFF],默认值:ON
优化fixsql文件写入方式,不再采用临时文件写入,改为流式直接写入目标文件
新增对MySQL中的struct, routine两种校验场景的支持,包括 DELIMITER、PROCEDURE/FUNCTION 定义包含COMMENT属性
新增支持 MySQL -> MySQL struct 场景下的表级 AUTO_INCREMENT 差异检测与修复
Bugs fixed
修复了ignoreTables参数无效问题
修复了tables参数不支持%通配符问题,重新支持包括库名映射场景下的%通配符用法,例如"db1.t%:db2.t%"
修复了当数据表没有显式主键,且表中有多行数据是重复的,可能会导致校验结果不准确问题
修复元数据查询链路并发共享状态导致的 DDL-yes 随机漂移问题
修复issue #I7IYLD #I6VTMQ #I6OEBB #IB6BM6
二进制包
Packages
Size
md5
gt-checksum-1.2.4-3a4dc60-linux-x86_64.tar.xz
42M
b5856c2b0b5e4eb1c363951127001606
gt-checksum-1.2.4-3a4dc60-linux-x86_64-minimal.tar.xz
12M
6a8cd56fbb7a58c0974b3dcf8648a1cf
gt-checksum-1.2.4-3a4dc60-linux-aarch64.tar.xz
42M
fe021d015eedb359fafd85c81b03a891
gt-checksum-1.2.4-3a4dc60-linux-aarch64-minimal.tar.xz
11M
004d297d29385b4f19bd53db1d204723
gt-checksum v1.2.3
05 Feb 07:39
Compare
Sorry, something went wrong.
No results found
gt-checksum v1.2.3下载列表
Changelog
gt-checksum v1.2.3版本更新说明 ,主要变化有:
增加数据库名映射功能,支持将源端数据库名映射为目标端不同名数据库,例如"db1.:db2. "
增加内存使用量限制,且当内存使用量超过该值时,会自动调低parallelThds,queueSize,chunkSize这几个影响性能的参数,并进行GC操作
对同一个表既有删索引又有加索引等操作时,两个DDL合并一起,提升效率
支持在fix sql中同时设置索引的不可见属性
修复 SQL 生成逻辑大幅优化
修复多个bug
二进制包
Packages
Size
md5
gt-checksum-1.2.3-9d5efab-linux-x86_64.tar.xz
38M
cc4e1e3c8f62e2d26457e1910b5bc8a9
gt-checksum-1.2.3-9d5efab-linux-x86_64-minimal.tar.xz
6.6M
9a09cd8264ae227180c289ee0800a505
gt-checksum-1.2.3-9d5efab-linux-aarch64.tar.xz
37M
c762662043c89ad417c7909aa4eb93ec
gt-checksum-1.2.3-9d5efab-linux-aarch64-minimal.tar.xz
5.9M
513ac0f9d1470b99ad0919fdfbc89cc4
gt-checksum-v1.2.2
05 Feb 07:38
Compare
Sorry, something went wrong.
No results found
gt-checksum v1.2.2下载列表
Changelog
gt-checksum v1.2.2版本更新说明 ,主要变化有:
合并jointIndexChanRowCount和singleIndexChanRowCount两个参数为新的参数chunkSize
不再支持命令行传参方式调用,仅支持配置文件方式调用,命令行参数仅支持"-h", "-v", "-c"等几个必要的参数
删除极简模式,默认支持配置文件中只有srcDSN, dstDSN, tables等几个参数
参数名lowerCaseTableNames变更为caseSensitiveObjectName,更好理解
新增参数memoryLimit,用于限制内存使用量,防止OOM
优化校验结果输出,Rows的值改为精确值,此外不再频繁输出刷屏
参数logFile支持日期时间格式,例如:gt-checksum-%Y%m%d%H%M%S.log
优化校验结果进度条及汇总报告内容,增加各表、各阶段各自的耗时
修复无法使用普通索引和无索引时校验失败的问题
修复多个bug
二进制包
Packages
Size
md5
gt-checksum-1.2.2-linux-x86_64.tar.gz
38M
0148f0e93d939561e57162ce472a4d43
gt-checksum-1.2.2-linux-aarch64.tar.gz
38M
3900305d8c2b9d244ae5cbe77afae7a4
gt-checksum-v1.2.1
20 Mar 03:06
Compare
Sorry, something went wrong.
No results found
gt-checksum-v1.2.0
20 Mar 03:04
Compare
Sorry, something went wrong.
No results found