一、概要
在信创(信息创新)政策的积极扶持与技术飞速发展的双重推动下,国产数据库在国内市场中的地位日益凸显,其重要性不断提升。对于未来的国内信息化从业者而言,熟悉并掌握一门国产数据库技术,已逐渐成为一项不可或缺的必备技能。本文简单展示如何将MySQL数据库迁移至国产金仓KingbaseES数据库的操作,抛砖引玉,共学共进。
二、金仓KingbaseES 简介
金仓数据库管理系统KingbaseES(简称“KES”)是电科金仓的核心企业级数据库产品,提供Oracle、MySQL、SQLServer和PostgreSQL四大兼容模式。KES现已发布至V9版本,最新版本号V009R001C002B0014。
三、金仓迁移工具介绍
俗话说“工欲善其事,必先利其器”,金仓KES针对异构数据库迁移到KES提供了一系列快捷高效的迁移工具比如:KDMS数据库迁移评估工具、KDTS数据库迁移工具、KFS对标OGG的异构数据同步软件等。本文主要使用KDTS工具对MySQL数据库离线迁移到KES数据库。
1、KDTS 简介
KDTS (Kingbase Data Transformation Service)是一款操作简单、高效稳定的数据库迁移工具,KDTS的核心任务是将异构数据库中的数据迁移到KingbaseES。它完整支持了数据迁移过程中需要的各种特性,包括自定义数据类型映射,并行迁移数据,迁移失败后统计,支持二次迁移,迁移结束后支持源和目的数据库的数据对比。基于智能翻译技术和并行任务调度架构实现数据库对象的智能转换和数据的高效迁移,“一键操作”将各种国内外的数据库对象和数据迁移到KingbaseES数据库,帮助用户轻松完成数据库迁移的工作。
KDTS用于数据库离线迁移,并完成数据库中所有对象定义的迁移和数据的迁移。
KDTS是迁移任务中必须使用的工具,和金仓异构数据同步软件Kingbase FlySync(简称KFS)组合使用可以完成在线迁移工作。
KDTS支持Oracle、Mysql、SQLServer、Gbase、PostgreSQL、DM、KingbaseES 数据库数据迁移到KingbaseES数据库的数据迁移。
目前支持的源端数据库版本如下图:
源端的数据库 | 支持版本 |
|---|---|
Oracle | 9i、10g、11g、12c、19c |
MySQL | 5.X、8.X |
SQLServer | 2000、2005、2008、2012、2014、2016、2017、2019 |
Gbase | 8s、8g |
PostgreSQL | 12 |
DM | 8 |
Db2 | 11 |
神通(OSCAR) | 7 |
KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
支持目标数据库版本下如图:
目标数据库 | 支持版本 |
|---|---|
KingbaseES | V7、V8R3、V8R6、V8R6C7、V9 |
支持源端的数据库迁移对象如下图:
源端的数据库 | 支持迁移对象 |
|---|---|
Oracle | 表(包含指定表、排除指定表 )、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释 |
MySQL | 表( 包含指定表、排除指定表)、视图、函数、存储过程、触发器、用户自定义类型、注释 |
SQLServer | 表(包含指定表、排 除指定表)、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 |
Gbase | 表(包含指定表、排 除指定表)、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 |
PostgreSQL | 表(包含指 定表、排除指定表)、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 |
DM | 表(包含指定表、排除指定表 )、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释 |
Db2 | 表(包含指定表、排除指定表 )、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释 |
神通(OSCAR) | 表(包含指定表、排除指定表 )、视图、序列、函数、存储过程、同义词、触发器、注释 |
KingbaseES | 表(包含指定表、排除指定表 )、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释 |
KDTS 数据库迁移工具的产品形态有以下两种:
- BS版
通过浏览器以可视化界面方式设置配置项,完成数据迁移。
- SHELL版
通过手动修改配置文件的方式设置配置项,完成数据迁移。
SHELL 版本常用于以下三种场景:
- 堡垒机:通过堡垒机形式访问主机
- 远程终端访问:通过远程终端形式访问主机
- 系统未安装图形化界面:访问未安装图形化界面主机
2、KDTS 迁移架构
3、部署KDTS
1、环境要求:
KDTS 迁移程序从源数据库读取数据后写入目标数据库,因此需要一定量的内存作为中转缓存(并行度越高、表中单行数据越大(特别是大对象(LOB,Large Object)字段,如BLOB、CLOB、NCLOB等)需要的内存越多)。此外,还需要一定量的磁盘空间用于存储日志、脚本、报告等。
CPU
根据CPU架构类型(x64、AArch64等)和操作系统选择相匹配的JDK,并根据计算机CPU的核心数/线程数、可用内存并兼顾源库和目标库服务器的性能及负载情况给KDTS 迁移程序规划和设置合理并行度以最大化提升迁移效率。
内存
启动脚本(bin/startup.sh或startup.bat)会自动根据计算机的可用内存自动计算分配给KDTS 迁移程序Java虚拟机内存(可用内存的三分之二),如果条件允许,可适当手动增大分配给KDTS 迁移程序的JVM内存(修改启动脚本中的JAVA_MEMORY)。
磁盘
检查计算机磁盘的剩余空间,应预留足够的磁盘空间(500MB以上,取决于迁移的对象和数据的多少)给KDTS 迁移程序,多次迁移时应注意清理过时的内容(logs和results目录)。
JDK
KDTS 迁移程序需要JDK11及以上的版本,如果计算机中已有可用的JDK,配置KDTS 迁移程序启动脚本(kdts-plus/bin/startup.sh或startup.bat)中JAVA_PATH即可。建议使用介质解压版本的JDK,也不要把JDK设置到系统环境变量里,以免影响计算机上的其它应用。
2、KDTS部署
KDTS迁移工具BS版随数据库一起打包发布,安装完数据库后,在`${KES_HOME}/ClientTools/guitools/KDts/KDTS-WEB`目录下,其中`${KES_HOME}`代表 Kingbase 数据库的安装根目录,程序包括如下目录:
- bin: 启动脚本
- conf: 配置文件
- drivers: 数据库连接驱动
- jdk: jdk目录
- lib: 程序包
- web: 页面文件
此外KDTS迁移工具SHELL版随数据库一起打包发布,安装完数据库后,在`${KES_HOME}/ClientTools/guitools/KDts/KDTS-CLI`目录下,其中`${KES_HOME}`代表 Kingbase 数据库的安装根目录,程序包括如下目录:
- bin: 启动脚本
- conf: 配置文件(包括manual_script(手工脚本)、mapping_rule(映射规则)等子目录,详见readme.md)
- drivers: 数据库连接驱动(注意不同版本驱动的存放目录差异,详见readme.md)
- jdk: jdk目录
- lib: 程序包
- logs: 运行日志
- results: 结果报告
- version: 版本查看脚本
3、KDTS 启动与关闭
KDTS 迁移程序的启动脚本在 bin 目录下,Linux 平台为 startup.sh,Windows 平台为 startup.bat。
关于 Java虚拟机内存:
系统会根据服务器可用内存自动调整Java虚拟机内存,如果需要手动调整,将启动脚本中的 JAVA_MEMORY 参数前的注释去掉修改为调整值即可。
Linux环境下调整startup.sh 如下参数:
#如果需要手动设置,把下面的注释(#)去掉后设置即可
#JAVA_MEMORY=18G
启动程序
$ sh startup.sh
输出KDTS信息、JDK信息,包括版本、配置信息、进程号等。log日志输出如下(每次启动在logs目录下创建一次):
关闭程序
$ sh shutdown.sh
日志输出
确认相关进程、端口
重新启动KDTS查看pid
ps -ef | grep 3151
netstat -anlp|grep 3151
查看application.properties配置文件确认分别为web访问http和https端口
KDTS WEB登录访问
访问地址: http://localhost:54523/,默认用户名及密码:kingbase / kingbase,会话保存策略:默认会话保存时间为24小时。
四、迁移数据库
1、迁移前准备
开始迁移前,应获取源数据库MySQL迁移的数据规模等信息,规划并调整目标端KingbaseES配置。
- 根据迁移数据规模的大小,迁移前可预先创建适当大小的数据和日志文件。
开始迁移之前根据待迁移数据库的大小,保证KingbaseES数据目录所在位置有足够的空间。
2. 根据源端MySQL数据库、用户和模式等信息在目标端KingbaseES创建同名相关对象并配置适当权限。
3. 大小写是否敏感
MySQL通常默认是大小写不敏感,而 KingbaseES 默认是大小写敏感,可以在KES初始化数据库的时候进行修改。
./initdb -D $KES_DATA -U SYSTEM --enable-ci
4. 查询MySQL数据库编码方式
show variables like 'character_set_database';
【KingbaseES初始化设置编码方式】
--encoding=GBK(支持 GBK UNICODE ASCII)
5. 查看表数据量大小
查看当前用户在MySQL中的表大小,按从大到小排序(单位GB)
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;
6. 检查数据库日期格式
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
7. 根据KingbaseES服务器硬件配置的实际情况调整 shared_buffers 大小,默认是128M,建议调整为内存的1/4大小。
8. 配置 KES 的MYSQL兼容开关
根据实际情况,应对目的数据库KES进行适当的MySQL兼容配置。通常,应配置以下兼容参数:
- mysql_interval_style :兼容MySQL的interval格式。
在KingbaseES系统参数 mysql_interval_style 的默认值为off。
- sql_mode :兼容MySQL的模式列表。
在KingbaseES系统参数 sql_mode 的默认值为ONLY_FULL_GROUP_BY。
可以用如下方式使用sql_mode参数:
TEST=# set sql_mode = 'ONLY_FULL_GROUP_BY';
2、使用 KDMS 数据库迁移评估工具评估待迁移数据库
金仓提供Oracle、MySQL、SQL Server、DB2、SyBase异构数据库在线一键评估工具,有条件可以先进行在线评估,网址如下:https://dms.kingbase.com.cn/dashboard
此外提供了在线SQL工具转换器,可以针对Oracle、MySQL、SQLServer 、DB2、Sybase数据库源SQL在线转换为KES语法SQL。
3、使用 KDTS 离线迁移
在完成上述准备工作以后,使用 KDTS 进行数据的离线迁移。KDTS提供了两种形态(BS、SHELL),可根据需要进行选择,本次通BS版本WEB页面操作进行MySQL迁移。 首先登录KDTS WEB控制台,访问地址: http://localhost:54523/,默认用户名及密码:kingbase / kingbase,会话保存策略:默认会话保存时间为24小时。
1.创建数据源
- 创建源数据库连接
创建源库数据库连接。创建数据库连接界面如下,填写数据源信息,包括: “连接名称”、“数据库类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“驱动”、“URL”、“连接参数” 。
- 创建目标数据库连接
创建目标数据库连接。创建数据库连接界面如下,填写数据源信息,包括: “连接名称”、“数据库类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“驱动”、“URL”、“连接参数” 。
2.新建迁移任务
KDTS 采用向导页的方式指导用户新建迁移任务,简单易用,依次配置“选择数据源”-“选择模式”-“选择迁移对象”-“配置参数”,即可快速配置一个迁移任务。
选择数据源
填写自定义任务名称(任务名称不能重复),选择“源数据库”和“目标数据库”,或者选择“新建数据源”后使用。
选择模式
根据您的数据迁移所需选择对应模式(如需选择模式在系统模式中可选中“包含系统模式”复选框)的表结构、表数据、视图、序列、函数、存储过程、程序包、同义词、自定义类型等。当模式较多时也可以通过左上方的查询框进行检索。 请您至少选择一种模式,否则将收到错误提示,以至于不能完成新建任务。
选择迁移对象
通过已选模式选择您需要迁移数据的表,模式较多时可在已选模式搜索框内输入模式名关键字进行快速检索。
可迁移此模式下全部表,也可以指定或排除部份表,当您选择“包含指定对象”或“排除指定对象”时,请您通过“从列表选择”或“从文件导入”将数据添加到包含列表中,如您未添加数据,则会收到错误提示,导致无法完成新建任务。
从列表选择对象时,可选择对应模式、检索对象名关键字进行快速检索对象。点击“添加”按钮后加入到已选列表,当您想要移除部份表时可以选择对应的表点击“移除”按钮取消表。选择完成后点击确定。
配置参数
迁移工具提供了一系列配置参数用于迁移方案的个性化配置,满足多种迁移场景。配置参数分为“迁移配置”、“数据类型映射”、“线程配置”三个方面。
3.执行迁移任务
可将此任务作为预迁移任务点击“保存”,或者作为执行任务点击“保存并迁移”。
- 迁移完成:
迁移结束“状态”栏显示“完成”,则迁移任务成功。
- 迁移失败:
迁移结束“状态”栏显示“失败”,则迁移任务失败。失败后可点击详情查看日志有助于解决问题。
- 查看迁移报告及问题处理
迁移完成后,需要确认执行结果,包括迁移数据量,是否有错误发生,可以通过迁移日志和迁移结果进行查看。
“迁移日志”打印迁移任务执行后的日志,具体可分为“系统日志”、“Error日志”、“Info日志”。
“迁移结果”功能的工作区包括“任务执行批次”、“迁移对象”、“总数”、“成功数”、“失败数”、“略过数”、“操作”。您可以查看历史迁移任务执行的每次记录,以及每次迁移的对象、成功数、失败数、查看失败任务的错误日志。
有问题的SQL可以通过在线SQL转换工具调整。
4.迁移结果
可以查看历史迁移记录
迁移完成也可以下载迁移记录excel
五、总结
异构数据库迁移是一个复杂而又繁琐的工作,好的迁移工具可以极大减轻迁移成本,金仓提供的迁移工具使迁移变得简单而高效。
KTDS工具目前没有开放独立安装包,集成在数据库KESV9R1介质中,可以通过安装KES数据库调用使用。如需要独立安装,请联系金仓商务。
由于时间仓促,测试数据简单,并没有完整的体验KDTS强大的功能。想了解更多迁移资料请浏览金仓官网论坛手册https://bbs.kingbase.com.cn/document。




