KingBase数据库迁移利器:KDTS工具深度解析与实战指南
引言:数据库迁移的痛点与破局之道
在数字化转型浪潮中,企业数据库迁移已成为家常便饭。无论是同构数据库升级(如Oracle 19c到KingbaseES V9),还是异构数据库替换(如MySQL 8.0迁移至国产金仓数据库),都面临着数据一致性、业务连续性、性能瓶颈三大核心挑战。传统迁移工具常因配置复杂、兼容性差、性能低下等问题,让DBA团队苦不堪言。
本文将深度解析金仓数据库自主研发的KDTS迁移工具,带您掌握高可用迁移的全流程技巧。
一、KDTS工具架构与核心优势
1.1 KDTS 工具介绍
KDTS(Kingbase Data Transformation Service)是金仓数据库打造的全栈式数据迁移平台,支持Oracle、MySQL、SQL Server等12种数据库到KingbaseES的双向迁移,基于智能翻译技术和并行任务调度架构实现数据库对象的智能转换和数据的高效迁移,“一键操作”将各种国内外的数据库对象和数据迁移到KingbaseES数据库,帮助用户轻松完成数据库迁移的工作。其架构设计凸显三大亮点:
- 支持灵活配置迁移任务,可以满足不同迁移场景的需求。
- 以任务为驱动,基于多线程异步处理机制,单机多线程迁移效率优于市面其他迁移工具。
- 支持完善的容错和重试机制,支持二次迁移,且提供更直观的可视化表格或图表类迁移报告供用户使用。
1.2 KDTS 架构
1.3 核心优势
- 灵活的迁移策略
-
支持多种迁移任务配置,满足不同迁移场景需求
-
支持全量和按条件迁移、同时迁移多个数据库、模式或者多个用户
-
支持按照策略进行大表拆分,提升迁移性能,实现多读多写,并行读、并行写
- 迁移任务执行高效稳定
-
以任务为驱动,基于多线程异步处理机制,保证单机多线程的迁移任务达到最佳的效率
-
完善的容错和重试机制,避免受外部因素的干扰,网络闪断、数据源不稳定等因素导致迁移过程的任务报错或停止
-
支持断点续传,迁移过程中出现异常中断可无缝接续
- 迁移结果保障
-
支持数据库对象二次迁移,如果有没迁移成功的对象,可以在迁移工具中修改出错的SQL语句保存以后进行二次迁移
-
提供完备的迁移报告,以表格报告和图表的方式直观展示迁移结果
二、KDTS 迁移版本矩阵
2.1 迁移版本
KDTS 同构、异构数据源向KingbaseES迁移的支持矩阵明细
源端数据库 | 源端数据库版本 | 支持迁移的对象种类 | 目标端数据库 | 目标端数据库版本 |
---|---|---|---|---|
Oracle | 9i、10g、11g、12c、19c | 表、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
MySQL | 5.X、8.X | 表、视图、函数、存储过程、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
SQLServer | 2000-2019 | 表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
Gbase | 8s/8g/8t/8sV8 | 表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
PostgreSQL | 9/10/12 | 表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
DM | 7/8 | 表、视图、序列、函数、程序包、存储过程、同义词、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
Db2 | 9/10/11 | 表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
神通(OSCAR) | 7 | 表、视图、序列、函数、存储过程、同义词、触发器、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
Sybase | 15.7 | 表、主键、外键、索引、约束、视图、函数、存储过程、触发器 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
GREENPLUM | 5/6 | 表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
HANA | 2 | 表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
INFORMIX | 14 | 表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
OPENGAUSS | 3 | 表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
OCEANBASE | 3 | 表、主键、外键、索引、约束、视图、函数、存储过程、触发器、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
KingbaseES | V7/V8R3/V8R6/V8R6C7/V9 | 表、视图、序列、函数、程序包、存储过程、同义词、触发器、用户自定义类型、注释 | KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
2.2 现有版本检查
方便用户迁移前确认源数据库和目标数据库版本,下面表格是博主统计的在各数据库版本的查询语句:
数据库 | 查询语句 |
---|---|
Oracle | select * from v$version; |
MySQL | select version(); |
SQLServer | select @@version; |
PostgreSQL | select version(); |
Db2 | select service_level from sysibmadm.env_inst_info; |
KingbaseES | select version(); |
三、迁移准备-MySQL至KingbaseES
3.1 迁移环境
部署目的数据库服务器 ,部署目的数据库服务器应遵循以下原则:
- 目的数据库服务器的 CPU、内存、网络环境等硬件应尽量采用较高的配置。
- 如果迁移的 MySQL数据库系统规模较大,如超过 1GB,则建议把 MySQL和 KingbaseES 部署在不同的物理机器上。
- 为确保迁移效率,应尽量把 KingbaseES 和 MySQL服务器部署到同一局域网内。
3.2 安装必要的软件
迁移前要安装下面这些软件:MySQL数据库系统、KingbaseES 数据库系统、JDBC 和ODBC 驱动程序、C 语言开发工具、TPC-C 测试工具、LoadRunner 等。
建议:如果迁移数据规模较大,对安装的 KingbaseES 数据库服务器进行适当的优化,比如增大 shared_buffer 大小、预先创建较大的日志文件,预先申请足够的表空间数据库文件等。
3.3 获取MySQL相关信息
- 获取源数据库MySQL服务名及迁移的数据规模信息
获取源 MySQL数据库的 IP 地址、实例名、网络服务端口号、用户名/密码等信息
在目的 KingbaseES 数据库上,使用 KSQL 工具上执行如下操作:
创建与源 MySQL 用户同名的用户,用户root
创建与源 MySQL 同名的数据库,mysql
创建与源 MySQL 同名的模式。如果通过查询分析器或 KSQL 工具创建同名用户,则省略此步。但是,如果通过企业管理器创建同名用户,则此步则不能省略
- 大小写是否敏感
MySQL通常默认是大小写不敏感,而 KingbaseES 默认是大小写敏感,可以在初始化数据库的时候进行修改
./initdb -D /home/kingbase/Kingbase/ES/V9/data -U SYSTEM --enable-ci
- 查询MySQL数据库编码方式
show variables like 'character_set_database';
- 查看表数据量大小
查看当前用户在MySQL中的表大小,按从大到小排序
select
table_schema, table_name, table_rows, truncate(data_length/1024/1024, 2), truncate(index_length/1024/1024,2)
from information_schema.tables
where table_schema = 'mysql'
order by data_length desc, index_length desc;# TABLE_SCHEMA TABLE_NAME TABLE_ROWS truncate(data_length/1024/1024, 2) truncate(index_length/1024/1024,2)
mysql help_topic 817 1.51 0.09
mysql help_keyword 938 0.12 0.12
mysql help_relation 1723 0.09 0.00
mysql innodb_index_stats 158 0.06 0.00
mysql global_grants 47 0.04 0.00
mysql proxies_priv 1 0.01 0.01
mysql db 2 0.01 0.01
mysql replication_asynchronous_connection_failover 0 0.01 0.01
mysql procs_priv 0 0.01 0.01
mysql help_category 53 0.01 0.01
mysql replication_group_member_actions 2 0.01 0.01
mysql tables_priv 2 0.01 0.01
mysql engine_cost 2 0.01 0.00
mysql func 0 0.01 0.00
mysql gtid_executed 0 0.01 0.00
- 检查数据库日期格式
MySQL数据库中date的默认格式为“YYYY-MM-DD”,time的默认格式为“HH:MM:SS”
KES中时间的默认格式为:ISO,YMD
MySQL数据库中有日期“0099-09-30 00:00:00”,KingbaseES中将99识别为月份报错:
ERROR: date/time field value out of range
- 配置 KingbaseES 的MySQL兼容开关
根据实际情况,应对目的数据库KingbaseES进行适当的MySQL兼容配置
- mysql_interval_style:兼容MySQL的interval格式
需要在KingbaseES系统参数 mysql_interval_style 的默认值为off
- sql_mode:兼容MySQL的模式列表
ONLY_FULL_GROUP_BY:如果查询的select列表、HAVING条件或ORDER BY列表,引用了既不在GROUP BY子句中命名,也不再功能上依赖于GROUP_BY列的非聚合列,则拒绝这些查询;
STRICT_ALL_TABLES:为所有存储引擎启用严格SQL模式,无效的数据值将被拒绝;
REAL_AS_FLOAT:REAL类型默认是FLOAT8,开启之后为FLOAT4;
NO_AUTO_VALUE_ON_ZERO:开启时,插入0序列不自增,将0作为最终插入的值;
ANSI_QUOTES:表示双引号返回标示符。如果用户取消该选项,则表示双引号返回字符常量。注意:若取消该模式,将会导致Studio工具新建、删除对象失败。
博主是下面的这种方式使用的sql_mode参数:
TEST=# set sql_mode = 'ONLY_FULL_GROUP_BY';
SET
TEST=# show sql_mode;sql_mode
-----------------------------------
ONLY_FULL_GROUP_BY
因篇幅有限,具体迁移流程见后续文章
四、迁移性能优化
为了提高迁移速度,应对目的库KingbaseES进行性能优化配置
-
根据迁移数据规模的大小,迁移前可预先创建适当大小的的数据和日志文件。开始迁移之前根据待迁移数据库的大小,保证KingbaseES数据目录所在位置有足够的空间。
-
根据KingbaseES服务器硬件配置的实际情况调整shared_buffers大小,默认是128M,建议调整为内存的1/4大小。
五、结语
KDTS工具通过智能化的配置向导、全场景的兼容性支持、企业级的性能表现,已成为国产数据库迁移领域的标杆产品。其工具的高并发、大数据量场景下的可靠性成为数据库的不二之选
本文因篇幅有限,介绍各数据库的迁移兼容版本和迁移前的环境准备工作,后面会介绍迁移的详细步骤,专栏【前沿应用技术测评】目录中,点击查看
金仓官方:https://www.kingbase.com.cn/