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

从 MySQL 迁移到 DM8达梦数据库常见问题

原创 达梦 2021-01-31
3644

有 MySQL 语法直接转 DM 语法的工具吗

可以使用 DM 数据迁移工具 (DTS),进行 MySQL 到 DM 的迁移,MySQL 和 DM 数据库的语法兼容性不高。关于语法,对于表、视图或游标等对象的创建语法存在不同,需要基于 DM 数据库的语法进行改写;部分 MySQL 数据库自带的系统包、函数、存储过程在 DM 数据库中也不支持,同样需要手动改写或重建相同功能的对应对象。关于数据,MySQL 中的某些数据,在 DM 中可能会被判定为不合法,需要进行修改。

在迁移数据之前,需要修改 DM 数据库参数,修改兼容参数为兼容 MySQL 数据库 COMPATIBLE_MODE=4,重启数据库服务使其生效即可。

ini参数

  1. 选择迁移方式时,选择【MySQL–>DM】,如下图所示:

选择迁移方式

  1. 填写源端及目的端数据库信息(源端 MySQL,目的端 DM),保证数据库都能正常连接,如下图所示:

数据库信息

数据库信息

  1. 指定需要迁移的对象,MySQL 数据库到 DM 数据库的迁移,只能迁移表和视图,如下图所示:

选择迁移对象

  1. 选择迁移对象,可迁移的对象包括表和视图,如下图所示:

选择迁移对象

  1. 点击【完成】,即可完成迁移,可在完成迁移向导中看到迁移的详细信息,如下图所示:

完成迁移

至此,MySQL 到 DM 的数据迁移完成,但在迁移时只能迁移 MySQL 的表和视图,其他对象无法进行迁移,需要手动改写或者重新创建来完成数据对象的正常使用。

  • MySQL 中时间类型 TIMESTAMP 默认 default 设置为 0000-00-00 00:00:00
  • DM 中 TIMESTAMP 类型数据不能为 0000-00-0000:00:00,在 DM 中是不合法的,必须在 0001-01-01 00:00:00.0000009999-12-31 23:59:59.999999 之间,所以可通过直接修改 MySQL 中的业务表数据后进行数据迁移。
注意

在迁移过程中可能会遇到一些语法不谦容的问题,如多表的联合查询语法、含有特殊函数的 SQL 语句等,需根据实际情况进行解决,MySQL 对于外键等对象的处理逻辑同 DM 存在诸多不同,需因地制宜。

迁移 MySQL 是否需要下载驱动

可利用 DM 数据库自带的数据迁移工具迁移 MySQL,工具如下所示:

选择迁移方式

连接数据源

连接目的端

指定迁移对象

选择迁移对象

迁移完成

快速设置使得在 mybatis 下对象不用添加双引号

  • 设置大小写不敏感,此方法会影响查询结果集,因为其对结果集匹配也不区分大小写,需要根据业务自行评估是否可行。
  • 在数据库中,批量改成对应的。

数据迁移出现乱码

可能的原因是原数据的字符集和现在的 DM 数据初始化的字符集不一致,例如:MySQL 用的是 UTF8MB4 字符集,迁移到 DM 数据库后中文乱码,DM 数据库目前不支持 UTF8MB4

DTS 从 MySQL 迁移到 DM,char 长度是原来的 3 倍

【问题原因 1】

老版本 DTS 工具为保证数据成功迁移,会为不同字符集的目标库中 char 字段自动扩大 3 倍。

新版本已经优化该问题,请升级更新 DM 数据库版本。

查看 DTS 版本,如下图所示:

旧版本

MySQL 中表结构,如下图所示:

表结构

迁移过程,如下图所示:

迁移日志

迁移后 DM 数据库表结构,如下图所示:

迁移后表结构

【问题原因 2】

MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。gb18030 字符集,varchar(2) 才可以存一个汉字;UTF-8 字符集,varchar(3) 才可以存一个汉字。

UNSUPPORTED MAJOR.MINOR VERSION 52.0

【问题描述】

DTS 连接 MySQL 错误:COM/MYSQL/CJ/JDBC/DRIVER:UNSUPPORTED MAJOR.MINOR VERSION 52.0

【解决方法】

JDK 版本不匹配,把启动 DTS 的 JDK 版本调整一下,调整参数位置:数据库安装路径下 Tool 目录 dts.ini../jdk/bin

MySQL 存储过程改为 DM

【问题描述】

DM 数据库存储过程创建临时表,如下所示:

begin
set @x=1;
EXECUTE IMMEDIATE 'set @x=10;';
select @x;
end;

在 MySQL 中,可以使用 @ 定义 session 级别变量,然后在动态 SQL 中对变量进行赋值。DM 数据库是否支持这种方式。

【解决方法】

设置 MS_PARSE_PERMIT=1,然后重启数据库生效后,可以通过 @ 定义 session 级别变量。

begin
set @x=1;
EXECUTE IMMEDIATE 'select 10' into @x;
select @x;
end;

动态 SQL 中对变量进行赋值需要修改。

MySQL 的二进制数据怎么导入

可以用 DM 数据迁移工具 DTS,DTS 在数据库安装路径 Tool 目录下。

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

评论