当前位置: 首页 > ds >正文

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 核心优势

在这里插入图片描述

  1. 灵活的迁移策略
  • 支持多种迁移任务配置,满足不同迁移场景需求

  • 支持全量和按条件迁移、同时迁移多个数据库、模式或者多个用户

  • 支持按照策略进行大表拆分,提升迁移性能,实现多读多写,并行读、并行写

  1. 迁移任务执行高效稳定
  • 以任务为驱动,基于多线程异步处理机制,保证单机多线程的迁移任务达到最佳的效率

  • 完善的容错和重试机制,避免受外部因素的干扰,网络闪断、数据源不稳定等因素导致迁移过程的任务报错或停止

  • 支持断点续传,迁移过程中出现异常中断可无缝接续

  1. 迁移结果保障
  • 支持数据库对象二次迁移,如果有没迁移成功的对象,可以在迁移工具中修改出错的SQL语句保存以后进行二次迁移

  • 提供完备的迁移报告,以表格报告和图表的方式直观展示迁移结果

二、KDTS 迁移版本矩阵

2.1 迁移版本

KDTS 同构、异构数据源向KingbaseES迁移的支持矩阵明细

源端数据库源端数据库版本支持迁移的对象种类目标端数据库目标端数据库版本
Oracle9i、10g、11g、12c、19c表、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
MySQL5.X、8.X表、视图、函数、存储过程、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
SQLServer2000-2019表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
Gbase8s/8g/8t/8sV8表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
PostgreSQL9/10/12表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
DM7/8表、视图、序列、函数、程序包、存储过程、同义词、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
Db29/10/11表、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
神通(OSCAR)7表、视图、序列、函数、存储过程、同义词、触发器、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
Sybase15.7表、主键、外键、索引、约束、视图、函数、存储过程、触发器KingbaseESV7、V8R3、V8R6、V8R6C7、V9
GREENPLUM5/6表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
HANA2表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
INFORMIX14表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
OPENGAUSS3表、主键、外键、索引、约束、视图、序列、函数、存储过程、同义词、触发器、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
OCEANBASE3表、主键、外键、索引、约束、视图、函数、存储过程、触发器、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9
KingbaseESV7/V8R3/V8R6/V8R6C7/V9表、视图、序列、函数、程序包、存储过程、同义词、触发器、用户自定义类型、注释KingbaseESV7、V8R3、V8R6、V8R6C7、V9

2.2 现有版本检查

方便用户迁移前确认源数据库和目标数据库版本,下面表格是博主统计的在各数据库版本的查询语句:

数据库查询语句
Oracleselect * from v$version;
MySQLselect version();
SQLServerselect @@version;
PostgreSQLselect version();
Db2select service_level from sysibmadm.env_inst_info;
KingbaseESselect 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相关信息

  1. 获取源数据库MySQL服务名及迁移的数据规模信息

获取源 MySQL数据库的 IP 地址、实例名、网络服务端口号、用户名/密码等信息

在目的 KingbaseES 数据库上,使用 KSQL 工具上执行如下操作:

创建与源 MySQL 用户同名的用户,用户root

创建与源 MySQL 同名的数据库,mysql

创建与源 MySQL 同名的模式。如果通过查询分析器或 KSQL 工具创建同名用户,则省略此步。但是,如果通过企业管理器创建同名用户,则此步则不能省略

  1. 大小写是否敏感

MySQL通常默认是大小写不敏感,而 KingbaseES 默认是大小写敏感,可以在初始化数据库的时候进行修改

./initdb -D /home/kingbase/Kingbase/ES/V9/data -U SYSTEM  --enable-ci
  1. 查询MySQL数据库编码方式
show variables like 'character_set_database';
  1. 查看表数据量大小

查看当前用户在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
  1. 检查数据库日期格式

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

  1. 配置 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进行性能优化配置

  1. 根据迁移数据规模的大小,迁移前可预先创建适当大小的的数据和日志文件。开始迁移之前根据待迁移数据库的大小,保证KingbaseES数据目录所在位置有足够的空间。

  2. 根据KingbaseES服务器硬件配置的实际情况调整shared_buffers大小,默认是128M,建议调整为内存的1/4大小。

五、结语

KDTS工具通过智能化的配置向导、全场景的兼容性支持、企业级的性能表现,已成为国产数据库迁移领域的标杆产品。其工具的高并发、大数据量场景下的可靠性成为数据库的不二之选

本文因篇幅有限,介绍各数据库的迁移兼容版本和迁移前的环境准备工作,后面会介绍迁移的详细步骤,专栏【前沿应用技术测评】目录中,点击查看

金仓官方:https://www.kingbase.com.cn/

http://www.xdnf.cn/news/18796.html

相关文章:

  • golang6 条件循环
  • 01-鸿蒙系统概览与发展历程
  • Android面试指南(五)
  • 青少年机器人技术(二级)等级考试试卷-实操题(2024年9月)
  • C语言文件操作精讲:从格式化读写到随机访问
  • GOLANG 接口
  • Axure:如何打开自定义操作界面
  • loj数列分块入门2-3
  • c++string
  • crypto.randomUUID is not a function
  • 拓扑排序|hash
  • frp+go-mmproxy 实现透明代理的内网穿透
  • Qt5 高级功能
  • 关于说明锂电池充电芯片实际应用
  • 曲面方程的三维可视化:从数学解析到Python实现
  • 从罗永浩访谈李想中学习现代家庭教育智慧
  • 定时器互补PWM输出和死区
  • 54.Redis持久化-AOF
  • JEI(Journal of Electronic lmaging)SCI四区期刊
  • 控制建模matlab练习16:线性状态反馈控制器-⑤轨迹追踪
  • Linux内核进程管理子系统有什么第三十三回 —— 进程主结构详解(29)
  • 【KO】前端面试四
  • Java八股文-java基础面试题
  • 9.Shell脚本修炼手册---数值计算实践
  • 使用tensorRT10部署yolov5目标检测模型(2)
  • UE5.3 中键盘按键和操作绑定
  • 青少年机器人技术(六级)等级考试试卷-实操题(2021年12月)
  • 深入理解3x3矩阵
  • 11.Shell脚本修炼手册---IF 条件语句的知识与实践
  • 【数据结构】布隆过滤器的概率模型详解及其 C 代码实现