基本信息:
类型
数据库
IP:端口
版本
迁移对象
源库
MySQL
172.16.11.101:13309
5.7.24
表、视图、存储过程等对象
目标库
达梦DM
172.16.11.101:5238
DM V8
迁移说明:
DM数据迁移工具提供了主流大型数据库迁移到DM、DM到DM、文件迁移到DM以及DM迁移到文件的功能。
DM数据迁移工具采用向导方式引导用户通过简单的步骤完成需要的操作。
可以使用 DM 数据迁移工具 (DTS),进行 MySQL 到 DM 的迁移,MySQL 和 DM 数据库的语法兼容性不高。
关于语法,对于表、视图或游标等对象的创建语法存在不同,需要基于 DM 数据库的语法进行改写;
部分 MySQL 数据库自带的系统包、函数、存储过程在 DM 数据库中也不支持,同样需要手动改写或重建相同功能的对应对象。
关于数据,MySQL 中的某些数据,在 DM 中可能会被判定为不合法,需要进行修改。
DM数据迁移工具支持:
◆ 主流大型数据库Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix、Kingbase、Sybase的模式、表、视图、序列、索引迁移到DM;
◆ ODBC数据源、JDBC数据源的模式、表、视图迁移到DM;
◆ DM数据库的模式、表、视图、序列、索引迁移到主流大型数据库Oracle;
◆ DM数据库之间模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限的迁移;
◆ DM数据库模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限迁移到XML文件;
◆ DM数据库模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限迁移到SQL脚本文件;
◆ DM数据库的表、视图数据迁移到文本文件;
◆ DM数据库的表、视图数据迁移到Excel文件;
◆ DM数据库的表、视图数据迁移到Word文件;
◆ SQL脚本文件迁移到DM数据库;
◆ XML文件迁移到DM数据库;
◆ 指定格式的文本文件、Word文件和Excel文件迁移到DM数据库。
迁移前准备:
1.修改达梦数据库参数
在迁移数据之前,需要修改 DM 数据库参数,修改兼容参数为兼容 MySQL 数据库 COMPATIBLE_MODE=4 ,重启数据库服务使其生效即可。
[dmdba@cjc-db-03 CHEN]$ pwd/dm8/data/CHEN[dmdba@cjc-db-03 CHEN]$ vi dm.ini默认0,改成4。
数字代表的含义:
#Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata
修改:
COMPATIBLE_MODE = 4
重启DM数据库
[root@cjc-db-03 ~]# systemctl stop DmServiceCJC.service[root@cjc-db-03 ~]# systemctl start DmServiceCJC.service2.创建目标用户
注意:生产库需要创建用户对应的表空间,权限最小化。
disql SYSDBA/******:5238SQL> create user CJC identified by “******”;SQL> grant dba to CJC;3.生成测试数据
测试环境,新增测试数据
###MySQL 5.7.24
mysql> create database cjcdb;mysql> grant all privileges on cjcdb.* to cjc@%;mysql> flush privileges;###新增测试数据
[mysql@cjc-db-03 ~]$ mysql -ucjc -p###新增表
mysql> CREATE TABLE T1(ID INT,NAME varchar(30),key(ID));mysql> INSERT INTO T1 VALUES(1,AAA);mysql> INSERT INTO T1 VALUES(2,BBB);mysql> INSERT INTO T1 VALUES(3,CCC);###新增视图
mysql> create view v_t1 as select name from t1 where id=1;###新增存储过程
DELIMITER $$CREATE PROCEDURE p_t1_avg()BEGIN SELECT avg(id) from t1;END$$;DELIMITER;mysql> use cjcdbDatabase changedmysql> call p_t1_avg();+———+| avg(id) |+———+| 2.0000 |+———+1 row in set (0.31 sec)Query OK, 0 rows affected (0.31 sec)迁移:
1.打开DTS迁移工具
可以打开达梦数据库服务器上自带的DTS工具
[dmdba@cjc-db-03 tool]$ export DISPLAY=172.16.11.73:0.0[dmdba@cjc-db-03 tool]$ sh dts如果无法启用图形,可以在windows系统上安装达梦工具。
2.新建工程
3.新建迁移
欢迎界面
4.选择源库、目标库数据类型
5.配置源数据库信息
刷新,下一步
6.配置目标数据库信息
注意:
默认是SYSDBA,建议使用单独的业务用户,不要将业务数据存放在SYSDBA用户下。
7.迁移选项
注意:
去掉保持对象名大小写,达梦数据库不支持小写对象名。
8.查看默认类型映射关系
9.指定模式、对象
转换,查看映射关系
分析对象
10.开始迁移
下一步
可以看到,对象名,自动转换为大写
完成
迁移报告
迁移详细
迁移后检查:
1.查看对象
迁移前
SQL> select object_name,object_type from dba_objects where owner=CJC;LINEID OBJECT_NAME OBJECT_TYPE———- ———– ———–1 CJC SCH迁移后
2.查看表数据
SQL> select * from cjc.t1;LINEID ID NAME———- ———– —-1 1 AAA2 2 BBB3 3 CCCused time: 0.993(ms). Execute id is 1412.3.查看视图
SQL> select * from cjc.v_t1;LINEID NAME———- —-1 AAAused time: 1.241(ms). Execute id is 1413.4.查看存储过程
SQL> call cjc.p_t1_avg;LINEID AVG(ID)———- ——–1 2.000000used time: 1.732(ms). Execute id is 1414.5.查看对象创建语句
表
视图
存储过程
迁移遇到的问题:
1.无法连接源MySQL数据库
连接MySQL库失败,提示如下:
错误号: 0
错误消息: Communications link failure
The last packet successfully received from the server was 20 milliseconds ago. The last packet sent successfully to the server was 12 milliseconds ago.
解决方案:
1.下载驱动
驱动路径下载
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.11
驱动文件名:mysql-connector-java-8.0.11.jar
2.使用自定义URL
将
jdbc:mysql://172.16.11.101:13309/<databaseName>?tinyInt1isBit=false&transformedBit1sBoolean=false改成
jdbc:mysql://172.16.11.101:13309/cjcdb?tinyInt1isBit=false&transformedBit1sBoolean=false&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true3.驱动路径
指定新下载的mysql-connector-java-8.0.11.jar驱动文件
刷新,下一步
查看mysql-connector-java与MySQL数据库的版本对应关系:
参考链接:https://php-note.com/1934.html
2.INVALID OBJECT NAME
建议后检查对象和数据,报错:
无法查看表结构
SQL> desc cjc.t1;[-20001]:INVALID OBJECT NAME-20001: OBJ_IS_EXISTS line 201-20001: SHOW_PARA_INFO line 302 .used time: 4.056(ms). Execute id is 0.无法查看表数据
SQL> select * from cjc.t1;select * from cjc.t1;[-2106]:Error in line: 1Invalid table or view name [T1].used time: 0.528(ms). Execute id is 0.无法查看视图等
SQL> select * from cjc.v_t1;select * from cjc.v_t1;[-2106]:Error in line: 1Invalid table or view name [V_T1].used time: 0.589(ms). Execute id is 0.问题原因:
前面配置迁移选项,默认勾选了 保持对象名大小写。
由于MySQL数据库支持小写对象名,但达梦数据库不支持小写对象名,所以迁移后无法正确识别和使用对象数据。
通过管理工具可以看到,迁移后的对象名都是小写。
查看建表语句
达梦数据库会将对象小写名称自动转换为大写
新建表t2,小写
SQL> create table cjc.t2(id int);插入数据
SQL> insert into cjc.t2 values(1);SQL> commit;表名会被自动转换为大写
解决方案:
迁移选项部分 去掉 保持对象名大小写 部分,重新迁移。
参考:
DM 数据迁移工具https://eco.dameng.com/document/dm/zh-cn/start/tool-dm-migrate.html从 MySQL 迁移到 DMhttps://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.htmlDM DBA手记之MySQL移植到DM.pdfhttps://eco.dameng.com/eco-file-server/file/eco/download/2022081614103389JN7U46DVP8TURGBF达梦迁移工具连接 mysql 数据库错误,mysql5.7迁移到dm8https://blog.csdn.net/weixin_44990616/article/details/129078603###chenjuchao 20230722###