使用 gt-checksum 分析迁移对象

使用 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_WAREHOUSE
PCMS,BMSQL_CONFIG
PCMS,BMSQL_DISTRICT_TMP

映射关系示意图

SOURCE                 -->  DEST
-- 示例1:PCMS,BMSQL_WAREHOUSE
PCMS.BMSQL_WAREHOUSE   --> PCMS.BMSQL_WAREHOUSE
  • 库映射 (迁移到目标端后,表名不变,库名改变)
PCMS:WLKY,BMSQL_WAREHOUSE
PCMS:WLKY,BMSQL_CONFIG
PCMS:WLKY,BMSQL_DISTRICT_TMP

映射关系示意图

SOURCE                 -->  DEST
#示例1:PCMS:WLKY,BMSQL_WAREHOUSE
PCMS.BMSQL_WAREHOUSE   --> WLKY.BMSQL_WAREHOUSE
  • 表映射 (迁移到目标端后,库名不变,表名改变)
PCMS,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
PCMS,BMSQL_CONFIG:BMSQL_CONFIG_0429
PCMS,BMSQL_DISTRICT_TMP:BMSQL_DISTRICT_TMP_0429

映射关系示意图

SOURCE                 -->  DEST
#示例1:PCMS,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
PCMS.BMSQL_WAREHOUSE   --> PCMS.BMSQL_WAREHOUSE_0429
  • 库表映射 (迁移到目标端后,库名表名都改变)
PCMS:WLKY,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
PCMS:WLKY,BMSQL_CONFIG:BMSQL_CONFIG_0429
PCMS:WLKY,BMSQL_DISTRICT_TMP:BMSQL_DISTRICT_TMP_0429

映射关系示意图

SOURCE                 -->  DEST
#示例1:PCMS:WLKY,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
PCMS.BMSQL_WAREHOUSE   --> WLKY.BMSQL_WAREHOUSE_0429
gc-task.cnf配置示例
$ cat qianyi 
PCMS,BMSQL_WAREHOUSE
PCMS,BMSQL_CONFIG
PCMS,BMSQL_DISTRICT_TMP

$ cp -r config-simple config
$ cat config/gc-task.cnf
DSNs {
    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        表任务名称

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

<think&gt;好的,我现在需要帮助用户解决关于gt-checksum工具的问题。首先,用户提到了“gt-checksum”,但根据提供的引用内容,引用的资料是关于pt-table-checksum的。这可能意味着用户可能混淆了工具名称,或者gt-checksum是某个特定环境下的工具,但根据现有信息,我需要先确认这一点。 首先,检查用户提供的引用内容。引用1提到了使用REPLACE..SELECT语句计算数据并插入checksums表,引用2提到了pt-table-checksum工具及其参数,引用3提到了计算checksum的函数。这些都是与Percona的pt-table-checksum相关的。因此,用户可能误将工具名称写成了gt-checksum,而实际想了解的是pt-table-checksum。 接下来,用户的需求是了解工具的使用说明或解决错误。考虑到用户可能对工具有误解,我需要先指出可能的名称混淆,并基于现有引用内容提供关于pt-table-checksum的信息。同时,需要确保回答结构清晰,分步骤说明使用方法和常见错误解决。 在回答中,需要引用提供的参考资料,特别是关于参数和checksum计算的部分。例如,引用2中的--replicate-check-only参数和引用3中的--function参数,这些是重要的使用说明点。此外,引用1提到的REPLACE..SELECT语句说明了工具如何操作数据库,这也是使用说明的一部分。 用户可能遇到的问题包括配置错误、权限不足、主从延迟或数据不一致等。需要根据常见问题提供解决方法,并引用相关资料中的信息。例如,使用--replicate-check-only可以仅检查已有结果,这在周期性检查时有用(引用2),而选择合适的哈希函数(引用3)可能影响性能或准确性。 最后,生成相关问题需要覆盖工具的使用、优化、比较、错误处理和应用场景,帮助用户进一步探索。需要确保问题基于现有内容,如性能优化方法可能涉及参数调整,错误处理可能涉及权限或网络问题。 总结步骤: 1. 指出可能的工具名称混淆,确认用户需要的是pt-table-checksum。 2. 分步骤说明基本使用方法,包括常用参数和示例命令。 3. 列举常见错误及解决方法,引用提供的参考资料。 4. 生成相关问题,引导用户深入理解。</think&gt;[用户可见层] ### 关于 gt-checksum 工具的说明 根据您提供的信息,**gt-checksum** 可能涉及名称混淆。从引用内容来看,实际描述的是 **pt-table-checksum**(Percona Toolkit中的工具),用于MySQL主从数据一致性校验。以下是相关说明: --- ### pt-table-checksum 使用说明 #### 核心功能 通过在主库执行校验和计算,并将结果写入`checksums`表,从库同步后比对差异,检测数据一致性[^1][^2]。 #### 基本使用步骤 1. **安装Percona Toolkit** 需先安装Percona Toolkit包,包含`pt-table-checksum`命令。 2. **执行校验命令** ```bash pt-table-checksum --host=主库IP --user=用户名 --password=密码 --databases=数据库--tables=表名 ``` 默认使用CRC32算法计算校验和[^3]。 3. **常用参数** - `--replicate-check-only`:仅检查已有结果,不重新计算 ```bash pt-table-checksum --replicate-check-only ``` - `--function`:指定校验算法(如FNV1A_64、SHA1等) ```bash pt-table-checksum --function=SHA1 ``` - `--no-check-binlog-format`:忽略binlog格式验证(需谨慎使用) 4. **结果分析** 差异数据会标记在`percona.checksums`表的`this_crc`和`master_crc`字段中。 --- ### 常见错误及解决 1. **权限不足** - **现象**: 执行时提示`Access denied` - **解决**: 确保用户拥有`SELECT`, `SUPER`, `REPLICATION CLIENT`权限。 2. **主从延迟或中断** - **现象**: 工具暂停执行或报错 - **解决**: 检查主从同步状态,使用`--max-lag`参数限制允许的延迟阈值。 3. **校验结果不一致** - **现象**: `this_crc ≠ master_crc` - **解决**: 使用`pt-table-sync`修复数据差异。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值