介绍
金仓主导开发的KDTS( Kingbase Data Transformation Service),是一款将数据从Oracle、Mysql、DM、PG…迁移KingbaseES 数据库的数据迁移工具。
支持数据库
目前已支持的源端数据库较多,常用非国产Oracle、Mysql、PG,以及国产的DM、Gbase、神通(OSCAR)都在支持范围(此处请注意,部分国产也支持),可谓海纳百川,相当有想法。
支持数据类型,表(包含指定表、排除指定表)、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释,基本满足大部分迁移场景。
详细的支持说明可参考官方文档。
KDTS产品形态
KDTS 发布2种版本,
BS版,通过浏览器以可视化界面方式设置配置项,完成数据迁移,这可能是大多数人的首选。
SHELL版,通过手动修改配置文件的方式设置配置项,完成数据迁移。以便适配更复杂的迁移场景。
下面通过本地测试环境,利用BS版,演示通过KDTS将数据从Mysql 5.7.25 迁移至KingbaseES V009R001C001B0030。
迁移实施
环境信息
- 源端
IP :192.168.20.127
数据库:Mysql 5.7.25
端口:5725
用户:bicewow
待迁移数据库:sakila
- 目标端
IP :192.168.20.251
数据库:KingbaseES V009
端口:54321
用户:system
数据库:sakila
BS版KDTS启动
首先,无论BS版或者SHELL版,都是跟随数据库一起打包发布,所以无需单独安装。所在目录如下:
[kingbase@ogauss1 guitools]$ pwd
/home/kingbase/ES/V9/ClientTools/guitools
[kingbase@ogauss1 guitools]$ ll
total 0
drwxrwxr-x 10 kingbase kingbase 229 Dec 2 09:26 DeployTools
drwxrwxr-x 4 kingbase kingbase 38 Oct 24 14:16 KDts
drwxrwxr-x 8 kingbase kingbase 228 Oct 24 14:17 KStudio
[kingbase@ogauss1 guitools]$ cd KDts/
[kingbase@ogauss1 KDts]$ ll
total 0
drwxrwxr-x 9 kingbase kingbase 108 Oct 24 14:16 KDTS-CLI <===========SHELL版
drwxrwxr-x 9 kingbase kingbase 100 Dec 2 09:51 KDTS-WEB <===========BS版
启动
启动BS版 KDTS,在KDTS-WEB/bin目录下,有startup.sh脚本,需要有java环境,直接启动即可。
[kingbase@ogauss1 bin]$ pwd
/home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/bin
[kingbase@ogauss1 bin]$ ll
total 28
-rw-rw-r-- 1 kingbase kingbase 431 Apr 30 2024 shutdown.bat
-rwxrwxr-x 1 kingbase kingbase 348 Apr 30 2024 shutdown.sh
-rw-rw-r-- 1 kingbase kingbase 9740 Apr 30 2024 startup.bat
-rwxrwxr-x 1 kingbase kingbase 6993 Apr 30 2024 startup.sh <=======
[kingbase@ogauss1 bin]$ ./startup.sh
------------------------------------------------------------------------
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
------------------------------------------------------------------------
================================================ 2024-12-02_10-42-40 ================================================
kdts-app-console v1.0.3.258
jar name: kdts-app-console-1.0.3.258.jar
base path: /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB
bin path: /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/bin
config path: /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/conf
log path: /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/logs/kdts-app-console_2024-12-02_10-42-40.log
java path: /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/jdk
JAVA_OPT: -server -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dcache_enable=true -Dconfig.path=/home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/conf -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl -Djava.security.properties=./conf/enableLegacyTLS.security -Duser.country=CN -Duser.language=zh -Djsse.enableCBCProtection=false --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/ -Xms8G -Xmx8G -XX:+UseG1GC -XX:G1ReservePercent=20 -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:G1HeapRegionSize=8M -XX:+SegmentedCodeCache -XX:+PrintCommandLineFlags -XX:+ExplicitGCInvokesConcurrent
FreeMemory=20111M JavaMemory=8G
cpu_arch=x86_64
startup command: /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/jdk/bin/java -server -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dcache_enable=true -Dconfig.path=/home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/conf -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl -Djava.security.properties=./conf/enableLegacyTLS.security -Duser.country=CN -Duser.language=zh -Djsse.enableCBCProtection=false --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/ -Xms8G -Xmx8G -XX:+UseG1GC -XX:G1ReservePercent=20 -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:G1HeapRegionSize=8M -XX:+SegmentedCodeCache -XX:+PrintCommandLineFlags -XX:+ExplicitGCInvokesConcurrent -jar /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/lib/kdts-app-console-1.0.3.258.jar > /home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/logs/kdts-app-console_2024-12-02_10-42-40.log 2>&1 &
application pid: 15007
See "../logs/kdts-app-console_2024-12-02_10-42-40.log" or use the command-line "tail -f ../logs/kdts-app-console_2024-12-02_10-42-40.log" for more detail.
[kingbase@ogauss1 bin]$ cd ..
[kingbase@ogauss1 KDTS-WEB]$ ll
total 12
drwxrwxr-x 2 kingbase kingbase 82 Oct 24 14:16 bin
drwxrwxr-x 9 kingbase kingbase 4096 Dec 2 09:51 conf
drwxrwxr-x 28 kingbase kingbase 4096 Oct 24 14:16 drivers
drwxrwxr-x 8 kingbase kingbase 96 Oct 24 14:16 jdk
drwxrwxr-x 2 kingbase kingbase 44 Oct 24 14:16 lib
drwxrwxr-x 3 kingbase kingbase 128 Dec 2 10:42 logs
-rw-rw-r-- 1 kingbase kingbase 4 Dec 2 10:42 pid <======
drwxrwxr-x 4 kingbase kingbase 50 Oct 24 14:16 web
[kingbase@ogauss1 KDTS-WEB]$ cat pid
15007[kingbase@ogauss1 KDTS-WEB]$
如上,启动之后,生成一个pid文件 ,为shutdown.sh脚本做一个标识。
登陆访问
通过拉起的java进程可以看到,启动了2个端口,54523、54524。
[kingbase@ogauss1 bin]$ netstat -anlp|grep 15007|grep LIS
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::54523 :::* LISTEN 15007/java
tcp6 0 0 :::54524 :::* LISTEN 15007/java
访问地址:http://localhost:54523/
密码:kingbase/kingbase

端口54523官方已经给出了说明,那么端口54524是做什么的呢? 相信不会无缘无故开一个端口放哪儿吧。
在application.properties配置文件可以看到,54523 为http访问端口,54524为https访问端口,不错的惊喜。
[kingbase@ogauss1 conf]$ pwd
/home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/conf
[kingbase@ogauss1 conf]$ cat application.properties
logging.config=${config.path}/logback-spring.xml
....
# web / shell / gui
spring.dts.console=web
http.port=54523 <=========
server.servlet.session.cookie.name=JSESSIONID
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB
# jwt token 有效期,单位为毫秒(24小时)
jwt.expiration=86400000
# https 配置
server.port=54524 <=========
server.ssl.enabled=true
server.ssl.key-alias=system
server.ssl.key-store=classpath:keystore/kingbase.keystore
server.ssl.key-store-type=JKS
server.ssl.protocol=TLS
.....

建立数据源
在KDTS设置数据源,需要分别建立源端和目标端,这个很好理解,没有特殊的地方,照要求建就可以。
源数据库
在创建源端数据连接时,可以发现,其支持数据库版本种类,原比官方文档要多,竟然OB也在内,


目标数据库
在创建目标端数据连接时,可以发现,其支持数据库除了kingbaseES之外,还支持其他类型的数据库,看样子是一个通用的迁移工具。


建立迁移任务
从迁移任务的流程看,任务分四步,选择数据源–>选择模式–>选择迁移对象–>配置参数。
选择数据源
在此处,分别选择源数据库和目标数据库。

选择模式
选择需要迁移的数据库,选择 “sakila”, 选择后,默认会勾选表结构,数据,索引,过程等。

选择迁移对象
此处配置相当灵活,可以设置迁移对象,属主映射,以及相关的表空间设置,给了用户更多的选择。下面先按默认配置进行。

配置参数
这个步骤属于考虑迁移经验的地方,数据量小的情况下影响不大,如果源端迁移数据量较大,可能需要分别设置源端读取策略和目标端的写入策略,并行,拆分等规则,以便更快速的进行迁移,由于本次测试迁移数据量较小,下面先按默认配置进行。保存。

开启任务
由于数据库较小,迁移任务很快就完成,迁移报告如下,虽说有部分对象迁移失败,也在意料之中,毕竟没有哪一款迁移工具保证100%迁移成功,而且针对每种对象,失败都有报错日志,对于进行修复帮助较大。
报错对象可根据提示信息进行单独修复。

至此,KDTS的使用演示完毕,整个过程还是比较顺利的,不过需要注意的一点是,KingbaseES在建库的时候需要选择数据库模式Oracle、Mysql、PG等,这个需要与待迁移的数据库模式一致,否则迁移会出现很多兼容性问题,基本迁移不过去。
KDTS数据存储
通过KDTS的启动以及配置,并没有发现关于KDTS控制台,界面数据配置的地方,比如创建的数据源,创建的任务,以及运行的结果,存储在那些地方。
通过查看KDTS的运行目录,可找到一些存储信息。
一方面本地有相关存储日志,记录运行信息。
[kingbase@ogauss1 KDTS-WEB]$ ll
total 16
drwxrwxr-x 2 kingbase kingbase 82 Oct 24 14:16 bin
drwxrwxr-x 9 kingbase kingbase 4096 Dec 2 09:51 conf
drwxrwxr-x 28 kingbase kingbase 4096 Oct 24 14:16 drivers
drwxrwxr-x 8 kingbase kingbase 96 Oct 24 14:16 jdk
drwxrwxr-x 2 kingbase kingbase 44 Oct 24 14:16 lib
drwxrwxr-x 12 kingbase kingbase 4096 Dec 2 14:49 logs <======= 存储相关运行日志,十分丰富
-rw-rw-r-- 1 kingbase kingbase 5 Dec 2 10:54 pid
drwxrwxr-x 6 kingbase kingbase 114 Dec 2 14:49 results <======= 存储相关迁移结果
drwxrwxr-x 4 kingbase kingbase 50 Oct 24 14:16 web
一方面,在KDts/KDTS-WEB/conf目录有明显的“h2”,关于H2 数据库,是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中。
[kingbase@ogauss1 conf]$ pwd
/home/kingbase/ES/V9/ClientTools/guitools/KDts/KDTS-WEB/conf
[kingbase@ogauss1 conf]$ ll
..
-rw-rw-r-- 1 kingbase kingbase 123 Apr 30 2024 enableLegacyTLS.security
drwxrwxr-x 2 kingbase kingbase 33 Oct 24 14:16 exclude_reserved_word
drwxrwxr-x 2 kingbase kingbase 23 Dec 2 09:51 h2 <========
drwxrwxr-x 2 kingbase kingbase 37 Oct 24 14:16 kafka_config
....
[kingbase@ogauss1 conf]$ tree -l h2
h2
└── dts.mv.db <============== 数据库文件
0 directories, 1 file
[kingbase@ogauss1 conf]$
总结
KDTS 在支持的数据库种类上看,可以说是目前比较全面的,提供2种迁移产品,满足不同业务场景的需求,另外其安装迁移配置也相当简单,即便是新手也可以在短时间内适应其操作流程。最后,KDTS 是众多国产数据库迁移工具少有的支持DM、OB这种过程数据库迁移的工具,非常棒。




