暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

金仓KDTS实现Mysql迁移KingbaseES

1623

介绍

金仓主导开发的KDTS( Kingbase Data Transformation Service),是一款将数据从Oracle、Mysql、DM、PG…迁移KingbaseES 数据库的数据迁移工具。

支持数据库

目前已支持的源端数据库较多,常用非国产Oracle、Mysql、PG,以及国产的DM、Gbase、神通(OSCAR)都在支持范围(此处请注意,部分国产也支持),可谓海纳百川,相当有想法。

支持数据类型,表(包含指定表、排除指定表)、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释,基本满足大部分迁移场景。

详细的支持说明可参考官方文档。

金仓社区 - KDTS支持

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

clip.png

端口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
.....

clip_1.png

建立数据源

在KDTS设置数据源,需要分别建立源端和目标端,这个很好理解,没有特殊的地方,照要求建就可以。

源数据库

在创建源端数据连接时,可以发现,其支持数据库版本种类,原比官方文档要多,竟然OB也在内,

clip_2.png

clip_3.png

目标数据库

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

clip_4.png

clip_5.png

建立迁移任务

从迁移任务的流程看,任务分四步,选择数据源–>选择模式–>选择迁移对象–>配置参数。

选择数据源

在此处,分别选择源数据库和目标数据库。

clip_6.png

选择模式

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

clip_7.png

选择迁移对象

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

clip_8.png

配置参数

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

clip_9.png

开启任务

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

报错对象可根据提示信息进行单独修复。

clip_10.png

至此,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这种过程数据库迁移的工具,非常棒。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论