使用 gt-checksum 迁移表结构到 GreatSQL

立山  金牌会员 | 2024-12-20 10:40:17 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

使用 gt-checksum 迁移表结构到 GreatSQL

背景

本文以从 ORACLE 迁移到 GreatSQL 为例讲述怎样使用 gt-checksum 迁移表结构。
关于gt-checksum

gt-checksum是GreatSQL社区开源的一款静态数据库校验修复工具,支持MySQL、Oracle等主流数据库。其商业版本近期新增了表结构迁移功能,如下是一个简单的表结构迁移使用案例。
本次使用的是 gt-checksum 商业版本
配置gc-task.cnf

gc-task.cnf是gt-checksum的初始配置文件,内容包括源端目标端DB连接串以及迁移对象列表等信息,位于gt-checksum程序的config-simple目录下,gt-cheksum会根据gc-task.cnf来天生表结构迁移相干配置文件。
  1. $ cd ${gtdir}
  2. $ cp -r config-simple config
  3. $ cd config
  4. $ vi gc-task.cnf
  5. #源端URL
  6. srcDSN = "oracle|user/password@ip:port/sid"
  7. #目标端URL                                       
  8. dstDSN = "mysql|user:password@tcp(ip:port)/information_schema?charset=utf8mb4"
  9. #待迁移对象列表   
  10. object = "qianyi"
  11. #object中 库名表名的分隔符                                                                              
  12. limiter = ","
  13. #任务类型 struct表示迁移表结构                                                                                   
  14. active = struct
复制代码
配置迁移对象列表

以迁移PCMS库下BMSQL_WAREHOUSE  BMSQL_CONFIG  BMSQL_DISTRICT_TMP三张平凡表为例 配置方式如下:
配置格式  库名 分隔符 表
文件位置  与gt-checksum在同级目录
配置示例
  1. $ cat qianyi
  2. PCMS,BMSQL_WAREHOUSE
  3. PCMS,BMSQL_CONFIG
  4. PCMS,BMSQL_DISTRICT_TMP
复制代码
迁移对象列表配置方式阐明
object 支持如下四种配置方式:

  • 一般情况  无需映射(迁移到目标端后,库名表名稳定)
  1. PCMS,BMSQL_WAREHOUSE
  2. PCMS,BMSQL_CONFIG
  3. PCMS,BMSQL_DISTRICT_TMP
复制代码
映射关系表示图
  1. SOURCE                 -->  DEST
  2. #示例1:PCMS,BMSQL_WAREHOUSE
  3. PCMS.BMSQL_WAREHOUSE   --> PCMS.BMSQL_WAREHOUSE
复制代码

  • 库映射 (迁移到目标端后,表名稳定,库名改变)
  1. PCMS:WLKY,BMSQL_WAREHOUSE
  2. PCMS:WLKY,BMSQL_CONFIG
  3. PCMS:WLKY,BMSQL_DISTRICT_TMP
复制代码
映射关系表示图
  1. SOURCE                 -->  DEST
  2. #示例1:PCMS:WLKY,BMSQL_WAREHOUSE
  3. PCMS.BMSQL_WAREHOUSE   --> WLKY.BMSQL_WAREHOUSE
复制代码

  • 表映射 (迁移到目标端后,库名稳定,表名改变)
  1. PCMS,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
  2. PCMS,BMSQL_CONFIG:BMSQL_CONFIG_0429
  3. PCMS,BMSQL_DISTRICT_TMP:BMSQL_DISTRICT_TMP_0429
复制代码
映射关系表示图
  1. SOURCE                 -->  DEST
  2. #示例1:PCMS,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
  3. PCMS.BMSQL_WAREHOUSE   --> PCMS.BMSQL_WAREHOUSE_0429
复制代码

  • 库表映射 (迁移到目标端后,库名表名都改变)
  1. PCMS:WLKY,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
  2. PCMS:WLKY,BMSQL_CONFIG:BMSQL_CONFIG_0429
  3. PCMS:WLKY,BMSQL_DISTRICT_TMP:BMSQL_DISTRICT_TMP_0429
复制代码
映射关系表示图
  1. SOURCE                 -->  DEST
  2. #示例1:PCMS:WLKY,BMSQL_WAREHOUSE:BMSQL_WAREHOUSE_0429
  3. PCMS.BMSQL_WAREHOUSE   --> WLKY.BMSQL_WAREHOUSE_0429
复制代码
Oracle端表结构
  1.   CREATE TABLE "PCMS"."BMSQL_WAREHOUSE"
  2.    (        "W_ID" NUMBER(*,0) NOT NULL ENABLE,
  3.         "W_YTD" NUMBER(12,2),
  4.         "W_TAX" NUMBER(4,4),
  5.         "W_NAME" VARCHAR2(10),
  6.         "W_STREET_1" VARCHAR2(20),
  7.         "W_STREET_2" VARCHAR2(20),
  8.         "W_CITY" VARCHAR2(20),
  9.         "W_STATE" CHAR(2),
  10.         "W_ZIP" CHAR(9),
  11.          CONSTRAINT "BMSQL_WAREHOUSE_PKEY" PRIMARY KEY ("W_ID")
  12.   USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  13.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  14.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
  15. FAULT CELL_FLASH_CACHE DEFAULT)
  16.   TABLESPACE "USERS"  ENABLE
  17.    ) SEGMENT CREATION IMMEDIATE
  18.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  19.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  20.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
  21. FAULT CELL_FLASH_CACHE DEFAULT)
  22.   TABLESPACE "USERS"
  23.   CREATE TABLE "PCMS"."BMSQL_CONFIG"
  24.    (        "CFG_NAME" VARCHAR2(30),
  25.         "CFG_VALUE" VARCHAR2(50),
  26.          PRIMARY KEY ("CFG_NAME")
  27.   USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  28.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  29.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
  30. FAULT CELL_FLASH_CACHE DEFAULT)
  31.   TABLESPACE "USERS"  ENABLE
  32.    ) SEGMENT CREATION IMMEDIATE
  33.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  34.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  35.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
  36. FAULT CELL_FLASH_CACHE DEFAULT)
  37.   TABLESPACE "USERS"
  38.   CREATE TABLE "PCMS"."BMSQL_DISTRICT_TMP"
  39.    (        "D_W_ID" NUMBER(*,0) NOT NULL ENABLE,
  40.         "D_ID" NUMBER(*,0) NOT NULL ENABLE,
  41.         "D_YTD" NUMBER(12,2),
  42.         "D_TAX" NUMBER(4,4),
  43.         "D_NEXT_O_ID" NUMBER(*,0),
  44.         "D_NAME" VARCHAR2(10),
  45.         "D_STREET_1" VARCHAR2(20),
  46.         "D_STREET_2" VARCHAR2(20),
  47.         "D_CITY" VARCHAR2(20),
  48.         "D_STATE" CHAR(2),
  49.         "D_ZIP" CHAR(9)
  50.    ) SEGMENT CREATION IMMEDIATE
  51.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  52.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  53.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
  54. FAULT CELL_FLASH_CACHE DEFAULT)
  55.   TABLESPACE "USERS"
复制代码
天生gc-struct.cnf

gc-struct.cnf是表结构迁移的任务配置文件,gt-checksum根据gc-task.cnf来天生,放在gt-checksum同级目录下,天生方式如下:
  1. $ ./gt-checksum  -f config/gc-task.cnf
复制代码
如下输出表示配置文件天生成功
  1. $ ./gt-checksum  -f config/gc-task.cnf
  2. -- gt-checksum init configuration files --
  3. -- gt-checksum init log files --
  4. -- gt-checksum check parameter legality--
  5. 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
  6. ----begin read table object file and init table meta data---
  7. ----begin write data to xls ---
  8. [gt_tableObjectOptimizer_2024-10-14T14-59-34.xlsx] 元数据校对Excel表格已生成
  9. ----begin general gt-checksum config file ---
  10. [gc-struct.cnf] 配置文件已生成
  11. -- gt-task Table object sorting completed !!! --
复制代码
编辑gc-struct.cnf

gc-struct.cnf中部门参数根据gc-task.cnf天生,无需修改,还有部门参数是默认配置,需要根据项目现实情况来修改,此处仅展示表结构迁移过程中部门必改参数,其余参数及其寄义见文件内容。
  1. tableJoin = left
  2. #表关联方式  left表示以源端的库表对象为准,目标端不存在的做迁移,已存在的做校验  默认为join,表结构迁移时需改为left
  3. fix = table
  4. #生成SQL的方式 file表示将生成的建表SQL写入文件中;table表示将生成的建表SQL直接去目标端执行 此处以table为例
复制代码
迁移表结构

gc-struct.cnf配置完成后即可开始迁移表结构,需要注意的是要提前在目标端创建数据库。
  1. greatsql> CREATE DATABASE pcms;
复制代码
执行表结构迁移
  1. $ ./gt-checksum -f gc-struct.cnf
复制代码
如下输出表示表结构迁移任务完成
  1. $ ./gt-checksum -f gc-struct.cnf
  2. -- gt-checksum init configuration files --
  3. -- gt-checksum init log files --
  4. -- gt-checksum check parameter legality--
  5. 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
  6. -- gt-checksum begin check table --
  7. ~~~~~~~~~~~~~~~~~~~~~~~~~~gt-checksum start~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  8. Overall progress: [>                                                  ] 0.00%
  9. ----------------------------Dividing line------------------------------------
  10. ##########################gt-checksum end######################################
  11. Monitor Turned closed
  12. ~~~~~~~~~~~~~~~~~~~~~~~~~~gt-checksum start~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  13. Overall progress: [==================================================>] 100.00%
  14. ##########################gt-checksum end######################################
  15. Verification is over and data collection is in progress. Please wait...
  16. Check end
  17. ** gt-checksum Overview of results **
  18. Check time:  21.10s (Seconds)
  19. seq        schema        table                     checkMode        issue Type        fix Type        chkStat
  20. 3          PCMS          BMSQL_DISTRICT_TMP        struct           no                table           bad   
  21. 1          PCMS          BMSQL_CONFIG              struct           no                table           bad   
  22. 2          PCMS          BMSQL_WAREHOUSE           struct           no                table           bad   
  23. ----------------**********----------------
  24. gt-checksum report: totalTime: 21.101560578 (Seconds) checkTables: 3 normalTabls: 0 abnormalTables: 3 missTables: 0
复制代码
GreatSQL验证
  1. greatsql> USE pcms
  2. Reading table information for completion of table and column names
  3. You can turn off this feature to get a quicker startup with -A
  4. Database changed
  5. greatsql> SHOW tables;
  6. +--------------------+
  7. | Tables_in_pcms     |
  8. +--------------------+
  9. | bmsql_config       |
  10. | bmsql_district_tmp |
  11. | bmsql_warehouse    |
  12. +--------------------+
  13. 3 rows in set (0.00 sec)
  14. greatsql> DESC bmsql_config;
  15. +-----------+-------------+------+-----+---------+-------+
  16. | Field     | Type        | Null | Key | Default | Extra |
  17. +-----------+-------------+------+-----+---------+-------+
  18. | CFG_NAME  | varchar(30) | NO   | PRI | NULL    |       |
  19. | CFG_VALUE | varchar(50) | YES  |     | NULL    |       |
  20. +-----------+-------------+------+-----+---------+-------+
  21. 2 rows in set (0.00 sec)
  22. greatsql> DESC bmsql_district_tmp;
  23. +-------------+---------------+------+-----+---------+-------+
  24. | Field       | Type          | Null | Key | Default | Extra |
  25. +-------------+---------------+------+-----+---------+-------+
  26. | D_W_ID      | decimal(40,0) | NO   | MUL | NULL    |       |
  27. | D_ID        | decimal(40,0) | NO   |     | NULL    |       |
  28. | D_YTD       | decimal(12,2) | YES  |     | NULL    |       |
  29. | D_TAX       | decimal(4,4)  | YES  |     | NULL    |       |
  30. | D_NEXT_O_ID | decimal(40,0) | YES  |     | NULL    |       |
  31. | D_NAME      | varchar(10)   | YES  |     | NULL    |       |
  32. | D_STREET_1  | varchar(20)   | YES  |     | NULL    |       |
  33. | D_STREET_2  | varchar(20)   | YES  |     | NULL    |       |
  34. | D_CITY      | varchar(20)   | YES  |     | NULL    |       |
  35. | D_STATE     | char(2)       | YES  |     | NULL    |       |
  36. | D_ZIP       | char(9)       | YES  |     | NULL    |       |
  37. +-------------+---------------+------+-----+---------+-------+
  38. 11 rows in set (0.00 sec)
  39. greatsql> DESC bmsql_warehouse;
  40. +------------+---------------+------+-----+---------+-------+
  41. | Field      | Type          | Null | Key | Default | Extra |
  42. +------------+---------------+------+-----+---------+-------+
  43. | W_ID       | decimal(40,0) | NO   | PRI | NULL    |       |
  44. | W_YTD      | decimal(12,2) | YES  |     | NULL    |       |
  45. | W_TAX      | decimal(4,4)  | YES  |     | NULL    |       |
  46. | W_NAME     | varchar(10)   | YES  |     | NULL    |       |
  47. | W_STREET_1 | varchar(20)   | YES  |     | NULL    |       |
  48. | W_STREET_2 | varchar(20)   | YES  |     | NULL    |       |
  49. | W_CITY     | varchar(20)   | YES  |     | NULL    |       |
  50. | W_STATE    | char(2)       | YES  |     | NULL    |       |
  51. | W_ZIP      | char(9)       | YES  |     | NULL    |       |
  52. +------------+---------------+------+-----+---------+-------+
  53. 9 rows in set (0.00 sec)
复制代码
到此表结构成功从 Oracle 迁移到 GreatSQL。

Enjoy GreatSQL
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表