文章目录
- MySQL数据库迁移达梦数据库学习报告
- 概述
- 源库环境准备
- MySQL数据库安装
- 数据库实例配置
- 创建测试数据库与业务对象
- 源库连接信息确认
- 迁移前评估
- 启动DTS工具
- 创建评估工程与节点
- 配置评估数据源
- 配置评估内容与策略
- 选择评估对象
- 执行评估并查看报告
- 执行迁移
- 创建迁移节点
- 配置迁移数据源
- 配置迁移策略
- 选择迁移对象
- 执行迁移任务
- 迁移后对比
- 创建对比节点
- 配置对比选项
- 选择对比对象
- 对比中的精度差异说明
- 验证迁移结果
- 验证测试表
- 验证视图
- 验证函数
- 验证存储过程
- 验证触发器
- 学习总结
MySQL数据库迁移达梦数据库学习报告
使用DTS工具完成MySQL到DM的迁移评估、执行、对比与验证
概述
本次学习通过达梦数据迁移工具DTS,完成从MySQL数据库到达梦数据库的完整迁移示范过程。整个流程包括源库环境准备、迁移前兼容性评估、执行数据迁移、迁移后数据对比以及迁移结果验证五个阶段,全面掌握异构数据库迁移的标准流程和关键要点。
| 项目 | 配置 |
|---|---|
| 源数据库 | MySQL 8.0.46(Windows环境) |
| 目标数据库 | 达梦DM8(Linux环境) |
| 迁移工具 | 达梦DTS(Data Migration Tool) |
| 迁移对象 | 表、视图、函数、存储过程、触发器 |
| 迁移数据库 | db_mysql |
源库环境准备
MySQL数据库安装
在Windows宿主机环境下完成MySQL数据库的安装,本次实战使用MySQL 8.0.46版本。通过MySQL Installer安装向导完成软件安装。
数据库实例配置
MySQL软件安装完成后,通过MySQL Installer进行实例配置,主要步骤如下:
- 类型与网络:配置类型选择"Development Computer",端口保持默认3306,确保网络开放以便Linux端DTS工具访问
- 设置管理员root密码:设置root密码为
Mysql123 - 设置Windows服务:自动生成服务名
MySQL80,设置为开机自启 - 执行配置:确认所有配置项无误后点击"Execute"执行配置
创建测试数据库与业务对象
使用root用户登录MySQL,创建测试数据库并设置字符集:
-- 创建数据库,字符集设为utf8mb4CREATEDATABASEdb_mysqlDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;-- 切换到该数据库USEdb_mysql;在db_mysql数据库中创建部门表dept与员工表emp,并插入测试数据:
-- 创建部门表CREATETABLEdept(deptnoINTPRIMARYKEY,dnameVARCHAR(50),locVARCHAR(50));-- 创建员工表CREATETABLEemp(empnoINTPRIMARYKEY,enameVARCHAR(50),jobVARCHAR(30),mgrINT,hiredateDATE,salDECIMAL(10,2),commDECIMAL(10,2),deptnoINT,createtimeDATETIME,remarkVARCHAR(200),FOREIGNKEY(deptno)REFERENCESdept(deptno));-- 插入测试数据INSERTINTOdeptVALUES(10,'ACCOUNTING','NEW YORK');INSERTINTOdeptVALUES(20,'RESEARCH','DALLAS');INSERTINTOdeptVALUES(30,'SALES','CHICAGO');INSERTINTOempVALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20,NOW(),NULL);INSERTINTOempVALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30,NOW(),NULL);COMMIT;在表的基础上创建多种数据库对象,包括视图、存储过程、函数和触发器:
-- 创建视图CREATEVIEWv_emp_deptASSELECTe.empno,e.ename,e.sal,d.dnameFROMemp eJOINdept dONe.deptno=d.deptno;-- 创建函数DELIMITER//CREATEFUNCTIONfn_salary_level(salDECIMAL(10,2))RETURNSVARCHAR(20)DETERMINISTICBEGINIFsal>=3000THENRETURN'高薪';ELSEIFsal>=1000THENRETURN'中薪';ELSERETURN'普通';ENDIF;END//DELIMITER;-- 创建存储过程DELIMITER//CREATEPROCEDUREsp_get_employees_by_dept(INp_deptnoINT)BEGINSELECT*FROMempWHEREdeptno=p_deptno;END//DELIMITER;-- 创建触发器DELIMITER//CREATETRIGGERtrg_emp_before_insert BEFOREINSERTONempFOR EACH ROWBEGINIFNEW.remarkISNULLTHENSETNEW.remark=CONCAT('自动生成:',NEW.ename,'的入职记录');ENDIF;END//DELIMITER;源库连接信息确认
迁移前确认MySQL源库的连接参数,确保达梦DTS工具能够正常访问源库:
| 参数 | 值 | 说明 |
|---|---|---|
| 宿主机IP | 192.168.1.xxx | MySQL所在Windows主机IP |
| 端口 | 3306 | MySQL默认端口 |
| 数据库名 | db_mysql | 迁移的数据库 |
| 用户名 | root | 迁移用户 |
| 密码 | Mysql123 | 用户密码 |
注意:需要确保Windows防火墙开放3306端口,且MySQL用户允许从远程IP连接(需要执行GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码';并执行FLUSH PRIVILEGES;)。
迁移前评估
在正式迁移前,对迁移任务进行评估是确保迁移成功的必要环节。评估能提前发现源数据库与目标数据库之间的兼容性问题,包括对象语法兼容性、字符集兼容性、对象类型支持度以及数据量评估等。
启动DTS工具
在达梦数据库所在的Linux环境下,开启图形化界面权限并设置DISPLAY变量,进入达梦安装目录的tool目录,执行./dts启动达梦数据迁移工具。
# 设置图形化显示exportDISPLAY=:0.0# 进入工具目录cd/home/dmdba/dmdbms/tool# 启动DTS./dts创建评估工程与节点
在DTS工具中创建迁移工程mysql_to_dm,在工程下的评估目录中新建评估任务assess_employee,迁移路径选择MySQL => DM。
配置评估数据源
配置MySQL源库连接信息,包括主机IP、端口、数据库名、用户名和密码。配置完成后点击"测试连接",确认源库连接正常。
配置评估内容与策略
本次评估对象数量较少,选择"选择评估对象"方式手动指定待评估对象。由于数据量较小,无需统计表信息,评估SQL和评估策略按默认选项处理。
选择评估对象
指定评估数据库为db_mysql,选择该数据库下所有对象,包括表(dept/emp)、视图(v_emp_dept)、函数(fn_salary_level)、存储过程(sp_get_employees_by_dept)、触发器(trg_emp_before_insert)。
执行评估并查看报告
完成所有配置后,确认评估任务配置无误,点击"完成"开始执行评估。评估完成后查看评估报告,分析兼容性结果。
本次评估结果显示,该版本MySQL数据库对象与达梦数据库兼容性较好。其中视图与触发器标记为不兼容,其他对象完全兼容或转换后兼容。但在后续迁移后对比与迁移验证中证明,视图与触发器实际成功迁移并能正常使用,评估结果存在一定的误报情况。
执行迁移
创建迁移节点
在工程mysql_to_dm下的迁移目录中新建迁移任务migrate_employee,迁移路径选择MySQL => DM。
配置迁移数据源
分别配置源端和目的端的数据源连接:
- 源端MySQL配置:与评估节点配置一致
- 目的端达梦配置:配置达梦目标库的IP、端口、用户名和密码,测试连接确认正常
配置迁移策略
迁移策略与评估节点配置相同,选择"选择迁移对象"方式,手动指定需要迁移的对象。
选择迁移对象
指定数据库为db_mysql,勾选需要迁移的所有对象类型,包括该数据库下的两张表(dept、emp)、视图、函数、存储过程和触发器。
执行迁移任务
查看迁移任务配置,确认源端和目的端对象对应关系无误后,点击"完成"开始执行迁移。迁移过程中可以查看每个对象的迁移状态和进度。
迁移后对比
迁移完成后,需要对源库和目标库的对象定义和数据进行对比,验证迁移的准确性和完整性。
创建对比节点
在DTS工具中创建对比节点,数据源配置与迁移节点保持一致,源端为MySQL,目的端为达梦。
配置对比选项
选择"对比指定类型的对象",对比策略保持默认。对比内容包括对象定义(DDL语句)和数据(DML依据)两个维度。
注意:对比时不要勾选"忽略大小写"选项。如果勾选忽略大小写,在对比执行时可能出现定义与数据不一致的情况。因为MySQL中的表字段名是小写,而达梦实例配置了大小写敏感(CASE_SENSITIVE=Y),迁移后字段名会自动转为大写,忽略大小写会导致对比逻辑混乱。
选择对比对象
指定db_mysql模式并选择该模式下所有对象,执行对比。对比完成后查看对比报告,获取对比结果。
📸 截图位置12:对比报告结果
本次对比结果显示,不一致数量为0,说明源端和目的端db_mysql模式下的对象和数据完全一致,迁移成功。
对比中的精度差异说明
在对比过程中发现,emp表和dept表的createtime字段(DATETIME类型)存在显示精度差异:
- MySQL数据库DATETIME精度为秒,显示格式为
16:43:31.0 - 达梦数据库DATETIME类型支持纳秒级精度,显示格式为
16:43:31.000000000
这是由于两个数据库的DATETIME类型默认精度不同导致的显示差异,实际数据值是一致的,不影响数据的正确性。如果需要统一显示格式,可以在达梦端通过TO_CHAR函数指定格式输出。
验证迁移结果
使用达梦管理工具Manager连接达梦目标库,在模式中可以看到从MySQL迁移过来的db_mysql模式。对迁移过来的对象进行功能验证,确保所有对象都能正常使用。
验证测试表
查询dept和emp表的数据,确认数据完整且与源库一致:
-- 查询部门表SELECT*FROMdb_mysql.deptORDERBYdeptno;-- 查询员工表SELECT*FROMdb_mysql.empORDERBYempno;-- 统计数据量SELECTCOUNT(*)FROMdb_mysql.dept;SELECTCOUNT(*)FROMdb_mysql.emp;验证视图
查询迁移过来的视图,确认视图定义正确且能正常查询:
-- 查询视图SELECT*FROMdb_mysql.v_emp_dept;-- 查看视图定义SELECTTEXTFROMALL_VIEWSWHEREOWNER='DB_MYSQL'ANDVIEW_NAME='V_EMP_DEPT';验证函数
调用迁移过来的函数,确认函数能正常执行并返回正确结果:
-- 调用函数SELECTdb_mysql.fn_salary_level(5000)FROMDUAL;SELECTdb_mysql.fn_salary_level(15000)FROMDUAL;验证存储过程
执行迁移过来的存储过程,确认存储过程能正常运行:
-- 执行存储过程CALLdb_mysql.sp_get_employees_by_dept(20);验证触发器
插入一条数据到emp员工表,触发器trg_emp_before_insert会自动开启事务并生成该条数据的remark字段,验证触发器是否正常工作:
-- 插入数据触发触发器(remark字段不指定值,由触发器自动生成)INSERTINTOdb_mysql.emp(empno,ename,job,mgr,hiredate,sal,comm,deptno,createtime)VALUES(9999,'TEST','CLERK',7902,DATE'2026-01-01',800,NULL,20,SYSDATE);-- 验证触发器执行结果(remark字段应自动生成)SELECTempno,ename,remarkFROMdb_mysql.empWHEREempno=9999;-- 清理测试数据DELETEFROMdb_mysql.empWHEREempno=9999;COMMIT;学习总结
通过本次MySQL到达梦的完整迁移实践,深入掌握了异构数据库迁移的标准流程和关键要点:
- MySQL安装完成后需要通过MySQL Installer进行实例配置,包括配置类型选择、端口设置、root密码设置和Windows服务配置。默认端口3306,需要确保网络开放以便远程DTS工具访问。
- 迁移前评估能提前发现兼容性问题,但评估结果存在一定的误报情况。本次评估显示视图和触发器不兼容,但在后续迁移后对比与验证中证明视图与触发器成功迁移并有效使用。因此评估结果仅供参考,最终以迁移后实际验证为准。
- 迁移后进行对比验证时,不要勾选"忽略大小写"选项。因为MySQL表字段名是小写,而达梦实例配置了大小写敏感(
CASE_SENSITIVE=Y),迁移后字段名自动转为大写,忽略大小写会导致对比时出现定义与数据不一致的误报。 - MySQL与达梦的DATETIME类型存在精度差异:MySQL默认精度为秒,达梦支持纳秒级精度。这会导致显示格式不同(MySQL显示
16:43:31.0,达梦显示16:43:31.000000000),但实际数据值一致,不影响正确性。可通过TO_CHAR函数统一显示格式。 - 达梦DTS工具支持MySQL到DM的完整迁移,包括表、视图、函数、存储过程、触发器等多种对象类型。对于MySQL特有的语法(如
DELIMITER、AUTO_INCREMENT等),DTS会自动进行语法转换。 - 迁移完成后需要对所有对象进行功能验证,包括表数据查询、视图查询、函数调用、存储过程执行和触发器触发,确保每个对象都能在达梦环境下正常运行。特别是触发器,需要通过实际操作验证其业务逻辑是否正确执行。
- 整个迁移流程(评估→迁移→对比→验证)形成了完整的闭环,是生产环境数据库迁移的标准方法论。每个环节都有其不可替代的作用:评估降低风险、迁移执行数据转移、对比验证准确性、功能验证确保可用性。