使用DTS从MySQL 8.0迁移到达梦数据库

在使用DTS进行mysql8.0到dm7的数据迁移,选择DTS中的数据源并连接时报错。(使用默认驱动)

报错信息:Unknown character set index for field '255' received from server.

使用DTS从MySQL 8.0迁移到达梦数据库

该问题原因是MySQL版本高,mysql的jar版本低造成mysql与jar的编码错乱,也就是说默认的jar包版本过低。

于是指定对应mysql的新的驱动

再次指定新的驱动后仍然报错

报错信息:com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

使用DTS从MySQL 8.0迁移到达梦数据库

出现此问题的原因是jdk 版本与jdbc driver不兼容的问题,JDK的版本过低。jdk高版本能兼容低版本,但是低版本不能兼容高版本

查询网上相关资料得知:

major.minor version,它相当于一个软件的主次版本号,只是在这里是标识的一个Java Class的主版本号和次版本号。

J2SE 8 = 52,

J2SE 7 = 51,

J2SE 6.0 = 50,

J2SE 5.0 = 49,

JDK 1.4 = 48,

JDK 1.3 = 47,

JDK 1.2 = 46,

JDK 1.1 = 45

也就是说需要jdk1.8环境,而通过客户反馈的JDK版本情况,也是在使用JDK1.8

在达梦软件安装目录下,有一个jdk目录,达梦软件运行都是使用的此jdk环境

使用DTS从MySQL 8.0迁移到达梦数据库

 

解决办法,更换DTS使用的JDK环境:

方法一:关闭DTS工具。将已经存在的jdk文件备份一下,把要求的JDK1.8的环境拷贝过来,并重命名为jdk注意:此方法由于会替换整个达梦数据库软件的JDK,即便JDK是向上兼容的,仍可能存在一定风险

方法二:关闭DTS工具。进入达梦软件安装目录的tool目录,可以看到有一个dmt.ini文件,将此文件先备份,此处我备份为dts_bak.ini

使用DTS从MySQL 8.0迁移到达梦数据库

 

此时修改dts.ini文件,将原来使用的jdk更改为所需要的jdk版本

即修改../jdk/bin为新jdk目录,我的目录是C:\Program Files\Java\jdk1.8.0_221\bin

使用DTS从MySQL 8.0迁移到达梦数据库

使用DTS从MySQL 8.0迁移到达梦数据库

 

此时即完成了JDK的替换工作(此方法只更改了DTS使用的JDK版本,不会影响整个数据库软件)

-----------------------------------------------------------

经过以上方法更换DTS使用的JDK版本后,再次打开dts工具,配置连接数据源,指定驱动, 并自动获取驱动类名

使用DTS从MySQL 8.0迁移到达梦数据库

 

此时点击下一步仍会报错。

报错信息:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

使用DTS从MySQL 8.0迁移到达梦数据库

此错误主要是由于mysql8.0版本的使用的数据库连接字符串不一样,而且还对时区有要求,所以要勾选使用自定义URL选项,再引用下面的连接即可

url: jdbc:mysql://localhost:3306/<database_name>?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true

使用DTS从MySQL 8.0迁移到达梦数据库

此时再点击下一步就不会再报错,即能成功连接到mysql8.0

目前已验证MySQL 8.0.17和MySQL 8.0.19版本