达梦数据库提供了dmdts(达梦迁移工具)进行数据库迁移,目前主流的数据库基本都支持。达梦数据库与MySQL数据库的SQL语法存在一定的差异,底层体系结构也存在差异,所以达梦数据库与MySQL数据库的兼容性不是太完美。从MySQL数据库迁移到达梦数据库,结构复杂一些的系统还是需要一定的人工干预。
一、迁移环境
项 |
内容 |
达梦数据库 |
版本:DM Database Server 64 V8 字符集:GB18030 大小写敏感:GLOBAL_STR_CASE_SENSITIVE =1 页大小:8KB 簇大小:16KB |
MySQL数据库 |
版本:8.0.20 字符集:utf8mb4 大小写敏感:lower_case_table_names=1 存储引擎:innodb 页大小:16KB |
二、详细迁移步骤
启动达梦迁移工具DTS,达梦数据库迁移工具DTS一般在安装目录下的tool目录下,运行dts可执行文件即可。
新建工程,点击如下图红色框内的按钮,弹出工程命名对话框。
为新的工程命名,此处命名为mysql8_to_dm8。
展开新建的迁移工程,选择迁移,右键,点击新建组。新建组可以将同类迁移放在一个组里面,方便迁移工程的管理及使用。
在弹出的对话框里填入组名即可,然后选中新建的组,点击右键,新建迁移,输入迁移名mysql8_to_dm8,确定后会出现如下界面,进入达梦迁移工具迁移向导。
点击右下角下一步按钮。
选中MySQL==>dm,点击下一步。这里你可以看到达梦数据库目前支持迁移到达梦数据库的数据库类型及其他数据存储类型,以及达梦数据库能够使用该工具迁出到其他数据库或其他数据存储类型的支持列表。
进入MySQL登陆连接配置页面,根据源端MySQL数据库的信息,填入对应的信息即可。在这里需要注意,如果数据库版本比较高的情况下,建议下载较高版本的MySQL驱动,否则会报“错误消息: Unknown initial character
set index '224' received from server. Initial client character set can be
forced via the 'characterEncoding' property.”,驱动下载地址链接:https://dev.mysql.com/downloads/connector/j/
点击指定驱动,应用高版本的MySQL驱动。如下图,浏览选定驱动文件,点击确定即可。
驱动更换完成后,在其他MySQL数据库信息正确填入的情况下,就可以看到源端MySQL数据库里的所有数据库信息。如下图所示:
此处迁移的库名为employees数据库,选定点击下一步。进入目的端达梦数据库信息配置界面。
如果配置了ssl,选择高级选项标签,填入内容即可,点击下一步。
选择目的端对应的模式名,此处需要注意,达梦数据库不会主动创建与源端MySQL数据库名一样的模式及其表空间,默认使用sysdba模式,所以此处建议提前规划好迁移到达梦数据库后的模式名及表空间,并提前创建。此处选择employees模式,点击下一步,选择迁移对象。
这里,达梦数据库已经根据源端表结构情况,进行了初步的转换,如果要修改某个表的映射关系,鼠标选定要修改的表的记录,点击右下角转换按钮,进入设置表映射关系页面,如下图所示。
这里有两个选项:迁移策略选项与列映射选项,迁移策略选项这块内容主要用于配置该表在迁移过程中,需要迁移的内容以及相关的策略配置。如果迁移的业务数据量比较小,业务逻辑不太复杂,我们可以直接选择默认的配置进行迁移;如果迁移的业务数据量比较大,业务逻辑比较复杂,我们建议先进行表定义迁移,迁移确认完成后再迁移数据,最后进行约束、索引及注释迁移,这样可以减少出错率,虽然过程麻烦一点,但是是值得的。
迁移策略选项配置完成后,我们点击列映射选项,进行列设置配置,如下图。
在这里,可以调整目的端列的映射关系及列名。调整完后点击确定。配置信息确认无误后,点击下一步,进入迁移任务审阅界面,如下图所示。
确认迁移信息无误后,点击完成,进入迁移任务执行阶段,如下图所示。详细展示了迁移过程中,每个任务的执行时间及执行结果。
如图所示,对于迁移失败的任务项,会有失败的详细信息,点击查看详细信息,可以看到具体的错误信息及错误代码,此处迁移失败是因为DEPT_NAME列长度超出定义。如下图所示。
点击右下角重新迁移出错的对象,进入失败对象迁移选择列表,如下图所示。
选定要调整的迁移对象,点击右下角转换按钮,进入表映射关系设置界面。如下图所示。
选择列映射选项,调整DEPT_NAME列的长度为20,然后点击确定。
修改完成后,点击确定,点击下一步,进入审阅迁移任务界面,确认信息,点击完成。
到这里,就可以看到,所有的迁移都完成了,关闭迁移窗口结束迁移,然后协调开发工程师进行数据校验,确定迁移前后的数据一致。至于存储过程、函数、触发器以及自定义对象等类型的数据,基本都是需要人工介入,由人工进行等价改写编译入达梦数据库,如果业务架构及业务逻辑复杂的情况下,迁移工作量是相当大的。
三、迁移完成后收尾工作
1、更新统计信息
迁移完成,开发工程师核对数据没有问题后,应该对达梦数据库进行一次全库的统计信息更新工作,达梦数据库统计信息更新方法可以参考:
2、数据备份
在以上工作都完成手,应该对数据库配置完整的备份策略,并应主动发起首次数据库全库备份,备份方式可以根据实际情况定制。
注意:在迁移之前,部署达梦数据库时,如果确定源端数据库类型,COMPATIBLE_MODE参数按照需要按照已知的数据库类型进行选择,参数值0:不兼容任何数据库 1:兼容
SQL92 标准 2:部分兼容 ORACLE 3:兼容 MS SQL SERVER 4:部分兼容 MySQL 5:兼容 DM6 6:部分兼容 Teradata,所以当从 MySQL移植到达梦时,修改值为4;
四、迁移过程出现的错误处理
1、连接数据库时提示错误号为0的错误
错误号:
0
处理方法:下载高版本的MySQL驱动,使用指定驱动进行迁移,达梦数据库迁移工具默认的MySQL驱动版本比较低。
2、列长度超出定义
错误号:
-6169
错误消息: 列[LAST_NAME]长度超出定义
处理方法:根据错误详细信息,调整具体列的长度即可。