前言
随着YashanDB个人版的发布,最近很多小伙伴都下载部署并做了一些很有意思的测试。也有小伙伴希望结合业务对YashanDB进行更深入的测试,其中可能需要从Oracle或MySQL等数据库迁移业务数据到YashanDB中。和大多数数据库厂商一样,崖山也研发了配套的数据迁移工具:数据迁移平台YMP,在11月份崖山产品发布会上也做了专题介绍,但目前是不对个人开放的。因此,我来简单验证一下,使用一些开源工具,尝试打通YashanDB和主流的数据库(如Oracle、MySQL等)之间的数据迁移。
如下图所示,构造一个数据迁移场景:
-
分别在MySQL、YashanDB、Oracle中创建一张相同的表。
-
编写代码在MySQL表中写入1000条数据。
-
使用DBeaver数据导出功能将1000条数据迁移至YashanDB。
-
使用Kettle将YashanDB表中1000条数据迁移至Oracle表中。
数据库及工具版本信息
-
YashanDB个人版:YashanDB Personal 23.1 (Linux X86),下载链接:https://download.yashandb.com/download
-
MySQL社区版:8.0.32
-
Oracle:11.2.0.4
-
DBeaver:YashanDB DBeaver V23.1 (Windows X86),下载链接:https://download.yashandb.com/download
-
Kettle:pdi-ce-8.3.0.0-371
备注:各个数据库和工具安装步骤较多,这里就不赘述了。
建表
创建一个用于同步数据的表,字段覆盖主要的数据类型,包括整形、小数、字符型、时间、大对象。
MySQL建表语句:
CREATE TABLE CUSTOMER
(ID int,
NAME VARCHAR(32),
REMARK text,
CREATEDATE TIMESTAMP,
PERCENT FLOAT(5,2)
);
YashanDB和Oracle数据类型基本兼容,建表语句一致:
CREATE TABLE CUSTOMER
(ID INTEGER,
NAME VARCHAR(32),
REMARK CLOB,
CREATEDATE TIMESTAMP,
PERCENT NUMBER(5,2)
);
初始化数据
使用Java代码往MySQL的CUSTOMER表中插入1000条数据:
ID(INT):0~999
NAME(VARCHAR(32)):customer_0~customer_999
REMARK(text):一个长度为32002的字符串
CREATEDATE(TIMESTAMP):系统当前时间
PERCENT(FLOAT(5,2)):100以内的随机小数(保留2位小数)
初始化完成后,通过DBeaver查询MySQL表中的数据:
数据迁移MySQL->YashanDB
在DBeaver操作将CUSTOMER表的数据迁移至YashanDB,需要在DBeaver中添加YashanDB的数据库连接信息。
- 右键选中DBeaver中的mysql的CUSTOMER表,点击菜单中“导出数据”
- 设置导出目标为“数据库表”
- 表映射设置,目标容器选择预先创建的YashanDB数据库连接,并映射到对应的表。
- 其他配置保持默认,配置完成后执行导出。
- 数据迁移完成后,在DBeaver中查看YashanDB的CUSTOMER表数据,说明数据已经完整从Mysql表中迁移至YashanDB表中。
数据迁移YashanDB->Oracle
再验证将YashanDB的CUSTOMER表的数据通过Kettle迁移至Oracle数据库中。
- 配置数据源
在data-integration\simple-jndi\jdbc.properties文件中分别配置YashanDB和Oracle的连接信息
将YashanDB和Oracle对应的JDBC驱动包(yashandb-jdbc-1.5.1.jar,ojdbc6.jar)放在data-integration\lib目录下
oracle1/type=javax.sql.DataSource
oracle1/driver=oracle.jdbc.driver.OracleDriver
oracle1/url=jdbc:oracle:thin:@192.168.3.173:1521/orcl
oracle1/user=test123
oracle1/password=********
yasdb123/type=javax.sql.DataSource
yasdb123/driver=com.yashandb.jdbc.Driver
yasdb123/url=jdbc:yasdb://192.168.23.53:2688/yasdb
yasdb123/user=test123
yasdb123/password=********
- 打开Kettle,新创建一个转换,在图形化界面中拖拽两个组件“表输入”和“表输出”,并将两个组件连接起来
- 创建DB连接,分别创建YashanDB和Oracle的连接。连接方式选择JNDI,JNDI名称输入jdbc.properties配置的名称,YashanDB的连接类型也选择“Oracle”。
- 编辑“表输入”和“表输出”步骤。
“表输入”的数据库连接选择上一步配置的YashanDB的DB连接,SQL区域填写查表语句。
“表输出”的数据库连接选择上一步配置的Oracle的DB连接,填写对应的schema和表名称
- 如上配置完成后,启动转换任务。
-
查看日志确认执行结果,从YashanDB读取1000行数据,并写入Oracle。
2023/12/01 15:34:19 - Spoon - Using legacy execution engine
2023/12/01 15:34:19 - Spoon - 转换已经打开.
2023/12/01 15:34:19 - Spoon - 正在打开转换 [YashanDB2Oracle]…
2023/12/01 15:34:19 - Spoon - 开始执行转换.
2023/12/01 15:34:19 - YashanDB2Oracle - 为了转换解除补丁开始 [YashanDB2Oracle]
2023/12/01 15:34:19 - 表输出.0 - Connected to database [oracle] (commit=1000)
2023/12/01 15:34:27 - 表输入.0 - Finished reading query, closing connection.
2023/12/01 15:34:27 - 表输入.0 - 完成处理 (I=1000, O=0, R=0, W=1000, U=0, E=0)
2023/12/01 15:34:51 - 表输出.0 - 完成处理 (I=0, O=1000, R=1000, W=1000, U=0, E=0)
2023/12/01 15:34:51 - Spoon - 转换完成!! -
在Oracle库中查询CUSTOMER表的数据,确认迁移结果。说明通过Kettle,YashanDB表中数据已经完整迁移至Oracle中。
总结
通过这个数据迁移场景的验证,说明YashanDB在JDBC和Kettle/DBeaver这些开源工具的兼容性还是做得不错的,用起来非常顺畅。对于一些简单的YashanDB与其他数据库之间的数据迁移场景来说,这些开源工具完全够用了。小伙伴们可以试一试,迁移部分业务数据到YashanDB做更深入的测试和验证。
对于一些复杂和高要求的数据迁移场景,期待后续能见识和验证一下崖山迁移平台(YMP)的能力!