写点什么

使用 gt-checksum 分析迁移对象

作者:GreatSQL
  • 2025-04-25
    福建
  • 本文字数:2752 字

    阅读完需:约 9 分钟

使用 gt-checksum 分析迁移对象

背景

本文以从 ORACLE 迁移到 GreatSQL 为例讲述如何使用 gt-checksum 分析迁移对象。

关于 gt-checksum

gt-checksum 是 GreatSQL 社区开源的一款静态数据库校验修复工具,支持 MySQL、Oracle 等主流数据库。如下是一个简单的分析迁移对象的使用案例。


本次使用的是 gt-checksum 商业版本

为什么需要分析迁移对象?

首先我们通过一个项目案例来说明一下去 O 过程中为什么需要分析迁移对象。

项目背景

当前有个去 O 项目,总共 3000 张业务表 ,总数据量大概在 3T 左右,业务方要求在 3 小时内迁移完成。

思考

这时,我们就要思考,如何能在规定时间内完成迁移?影响迁移效率的因素有哪些?

索引的选择性

业务表有没有索引;是主键索引还是普通索引;是全局索引还是本地索引;若存在索引,索引的离散度如何。

元数据合理性

业务表中有没有 lob 或者 text 字段,若存在,总共有多少个 lob 或 text 字段;业务表是否是分区表,表的分区类型是什么以及总共有多少个分区。

表的数据量

每张表各有多少数据量,百万级、千万级还是亿级别。


上述的这些信息,通过 gt-checksum 的迁移对象分析,我们都可以获取到。


下面开始分析流程。

如何分析迁移对象?

配置 gc-task.cnf 配置文件

分析行为依赖于配置文件 config-simple/gc-task.cnf,在分析操作开始前,需要先根据项目实际信息配置好此文件,如下是配置说明。

gc-task.cnf 配置说明

DSNs(连接模块)


  • srcDSN:源端连接串

  • dstDSN:目标端连接串

  • srcDSN/dstDSN:格式存在差异 严格根据示例填写 注意双引号不要漏 配置需仔细

  • 密码中有 &符号的需要转义处理下(&)


rules(规则模块)


  • object:迁移对象列表 文件名称自定义;格式:库名 分隔符 表名 位置:与 gt-checksum 在同级目录

  • limiter:迁移对象列表的分隔符,默认为逗号

  • igcount:分析时是否输出表行数 true: 不输出 false: 输出

  • active:生成配置文件类型 struct:表结构 index:索引 sync:数据迁移......


详细说明见 gc-task.cnf 文件注释

object 配置说明

object 支持如下四种配置方式:


以迁移 PCMS 库下BMSQL_WAREHOUSEBMSQL_CONFIG BMSQL_DISTRICT_TMP三张普通表为例


  • 一般情况 无需映射(迁移到目标端后,库名表名不变)


PCMS,BMSQL_WAREHOUSEPCMS,BMSQL_CONFIGPCMS,BMSQL_DISTRICT_TMP
复制代码


映射关系示意图


SOURCE                 -->  DEST-- 示例1:PCMS,BMSQL_WAREHOUSEPCMS.BMSQL_WAREHOUSE   --> PCMS.BMSQL_WAREHOUSE
复制代码


  • 库映射 (迁移到目标端后,表名不变,库名改变)


PCMS:WLKY,BMSQL_WAREHOUSEPCMS:WLKY,BMSQL_CONFIGPCMS:WLKY,BMSQL_DISTRICT_TMP
复制代码


映射关系示意图


SOURCE                 -->  DEST#示例1:PCMS:WLKY,BMSQL_WAREHOUSEPCMS.BMSQL_WAREHOUSE   --> WLKY.BMSQL_WAREHOUSE
复制代码


  • 表映射 (迁移到目标端后,库名不变,表名改变)


PCMS,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429PCMS,BMSQL_CONFIG:BMSQL_CONFIG_0429PCMS,BMSQL_DISTRICT_TMP:BMSQL_DISTRICT_TMP_0429
复制代码


映射关系示意图


SOURCE                 -->  DEST#示例1:PCMS,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429PCMS.BMSQL_WAREHOUSE   --> PCMS.BMSQL_WAREHOUSE_0429
复制代码


  • 库表映射 (迁移到目标端后,库名表名都改变)


PCMS:WLKY,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429PCMS:WLKY,BMSQL_CONFIG:BMSQL_CONFIG_0429PCMS:WLKY,BMSQL_DISTRICT_TMP:BMSQL_DISTRICT_TMP_0429
复制代码


映射关系示意图


SOURCE                 -->  DEST#示例1:PCMS:WLKY,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429PCMS.BMSQL_WAREHOUSE   --> WLKY.BMSQL_WAREHOUSE_0429
复制代码

gc-task.cnf 配置示例

$ cat qianyi PCMS,BMSQL_WAREHOUSEPCMS,BMSQL_CONFIGPCMS,BMSQL_DISTRICT_TMP
$ cp -r config-simple config$ cat config/gc-task.cnfDSNs { srcDSN = "oracle|user/password@ip:port/sid" dstDSN = "cluster|user:password@tcp(ip:port)/information_schema?charset=utf8mb4"}
rules { task { object = "qianyi" limiter = "," igcount = false active = struct }}
复制代码

执行分析命令

gc-task.cnf 配置完成后即可进行迁移对象的分析操作,执行命令如下


$ ./gt-checksum -f config/gc-task.cnf
复制代码


如下输出表示分析操作成功


$ ./gt-checksum -f config/gc-task.cnf-- gt-checksum init configuration files -- -- gt-checksum init log files -- -- gt-checksum init check parameter ---- gt-checksum check parameter legality--godror WARNING: discrepancy between DBTIMEZONE ("+00:00"=0) and SYSTIMESTAMP ("+08:00"=800) - set connection timezone, see https://github.com/godror/godror/blob/master/doc/timezone.md----begin read table object file and init table meta data-------begin write data to xls ---[gt_tableObjectOptimizer_2025-02-18T15-34-03.xlsx] 元数据校对Excel表格已生成----begin general gt-checksum config file ---[gc-struct.cnf] 配置文件已生成-- gt-task Table object sorting completed !!! --
复制代码

分析结果解析

分析操作执行成功后,会在 gt-checksum 同级目录下生成分析结果 Excel ,文件以 “gt_tableObjectOptimizer_” 为前缀。

sheet 说明

Excel 中包含三个 sheet,各个 sheet 说明如下:


  • indexTask:有索引的表清单

  • missindexTask:无索引的表清单

  • tableMiss:迁移对象列表中存在,但在源端 Oracle 环境中不存在的表清单


注意:

  • “迁移对象”指业务方给出的需要做迁移的表清单

  • tableMiss 中的表特别注意,这部分表需要拿出来去跟业务侧确认是否迁移

title 说明

Excel 中含三个 sheet 的 title 一致,内容解析如下:


schema          库名                                                         table           表名lobCN           lob字段名称,若无lob字段,相关列为空                            lobCT           lob字段类型textCN          text字段名称,若无text字段,相关列为空                      textCT          text字段类型indexName       索引名称                                                      indexType       索引类型indexColumn     索引字段名称                                              columnType      索引字段类型cardinality     索引离散度rate evaluation 索引离散度等级 有索引表: 优(>50%)良(40%-50%)差(<40%)  无索引表:差(有数据)  优(无数据)table Rows      表count数  partition Sum   表分区个数  0:normal表 非0:分区表table Partition Type     表分区类型                                           status          表状态  true:表在源端存在  miss:表在源端不存在taskName        表任务名称
复制代码


到此就是一个完整的迁移对象分析流程了。

发布于: 刚刚阅读数: 3
用户头像

GreatSQL

关注

GreatSQL社区 2023-01-31 加入

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。 社区:https://greatsql.cn/ Gitee: https://gitee.com/GreatSQL/GreatSQL

评论

发布
暂无评论
使用 gt-checksum 分析迁移对象_GreatSQL_InfoQ写作社区