迁移概述
将MySQL数据库迁移至达梦数据库是国产化替代过程中的常见信创改造需求。达梦数据库提供了多种迁移工具和方法,使得迁移过程可以高度自动化。根据数据量和业务复杂度的不同,迁移工作可以在几十分钟到数小时完成。
主要迁移方式对比
| 迁移方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| SQLark百灵连接 | 30GB以下数据量,追求效率的场景 | 图形化操作,几分钟完成,一次成功率90%以上 | 需下载独立工具 |
| DM数据迁移工具(DTS) | 大多数迁移场景,尤其是中小型数据库 | 官方图形化工具,功能全面,向导式操作 | 对大表迁移需特殊处理 |
| 命令行工具(dmfldr) | 超大型数据库,批量数据处理 | 高性能,适合脚本化自动化迁移 | 操作复杂,需手动转换格式 |
迁移流程图
MYSQL移植DM8大致有以下步骤:
1.分析待移植系统,确定移植对象。
2.通过数据迁移工具DTS完成常规数据库对象及数据的迁移。
3.对少数数据库对象进行兼容性改写。
4.移植完成后对移植的结果进行校验,确保移植的完整性和正确性。
5.应用系统进行移植、测试和优化。
详见官方迁移文档:
迁移前准备
1. 环境检查与备份
确认版本信息:记录MySQL数据库版本及实例配置,并安装兼容的达梦数据库(推荐DM8)
检查网络与存储:确保迁移机器能同时访问MySQL和达梦数据库,并有足够存储空间
数据备份:务必对源数据库进行完整备份,防止迁移过程中数据丢失
兼容MySQL配置:
| 参数名 | 参数值 | 说明 | |
|---|---|---|---|
达梦数据库dm8配置 | case_sensitive | N | 忽略大小写(需在创建实例时指定) SELECT CASE_SENSITIVE(); -- 结果为1表示大小写敏感,0表示大小写不敏感 |
COMPATIBLE_MODE | 4 | 兼容mysql模式(需在创建实例时指定) | |
ORDER_BY_NULLS_FLAG | 2 | 兼容mysql模式(需在创建实例时指定) | |
权限 | RESOURCE,PUBLIC,SOI,VTI | 授予角色 |
2. 工具准备
SQLark:从官网(www.sqlark.com)下载
达梦DTS:达梦数据库安装后自带,可在开始菜单中找到
命令行工具:dmfldr(达梦高速数据加载器)
3. 达梦数据库初始化
初始化数据库时,不勾选"字符串比较大小写",勾选"VARCHAR类型以字符为单位"
创建相应用户和模式并授权(达梦中一个用户对应一个模式,相当于MySQL的数据库)
使用SQLark快速迁移(推荐)
对于追求效率的用户,SQLark是最佳选择,能在几分钟内完成30GB左右数据的迁移。
操作步骤:
创建迁移任务:在SQLark中点击"数据迁移",选择"仅数据迁移"
连接数据库:从客户端导入或新建MySQL(源库)和达梦(目标库)连接
选择迁移范围:支持全量迁移或指定范围迁移,对大表可单独设置只迁结构不迁数据
环境检查:工具自动检查目标库磁盘空间和参数,按提示解决不通过项
自动化迁移:工具全自动执行迁移,可实时查看进度
迁移校验:完成后查看对象数量和表行数是否一致
使用达梦DTS迁移
达梦自带的DTS工具更适合大多数常规迁移场景。
详细步骤:
打开迁移工具
通过"开始"菜单 → "达梦数据库" → "DM数据迁移工具"
创建迁移工程
右键"迁移管理" → "新建工程",输入工程名称
在工程下右键"新建迁移",自定义迁移名称
配置数据源
MySQL源库:选择"MySQL ==> DM"迁移类型
主机名、端口(默认3306)、用户名、密码
指定MySQL驱动包(除DM自带包外需手动提供)
选择要迁移的具体数据库
达梦目标库:
选择迁移对象
审阅并执行迁移
迁移出错处理
常见的如字段长度不足错误,可在达梦中修改字段长度后,选择"重新迁移出错的对象"。
迁移后校验与适配
1. 数据一致性检查
记录计数比对:在MySQL和达梦中执行
SELECT COUNT(*) FROM table_name抽样数据比对:对关键表抽样查询,对比两边结果是否一致
2. 应用程序适配修改
这是迁移成功的关键环节,需要处理以下差异:
数据库连接配置
# 原MySQL配置 spring.datasource.url=jdbc:mysql://localhost:3306/db spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 达梦配置 spring.datasource.url=jdbc:dm://localhost:5236/DB?compatible_mode=mysql&clobAsString=true:cite[2] spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver:cite[9]
常见SQL语法差异及解决方案
| MySQL语法 | 达梦兼容方案 | 备注 |
|---|---|---|
str_to_date() | 使用 date_format() 代替 | to_date() 同理 |
format() | 使用 to_char() 代替 | 注意格式字符串差异 |
group_concat() | 使用 wm_concat() 代替 | |
反引号` | 完全去除反引号 | 达梦不支持此符号 |
limit m, n | 使用 rownum 或 top | |
`column` | 使用 "column" 或直接去掉 | 达梦使用双引号 |
达梦数据库参数调整
在达梦数据库中执行以下SQL,并重启数据库:
sp_set_para_value(1,'ENABLE_BLOB_CMP_FLAG',1); sp_set_para_value(2,'COMPATIBLE_MODE',4);:cite[2]
COMPATIBLE_MODE=4 表示部分兼容MySQL模式,可解决很多语法兼容性问题。
分页插件配置
Springboot Pagehelper需指定方言:
pagehelper: helperDialect: oracle:cite[2] reasonable: true supportMethodsArguments: true params: count=countSql
常见问题与解决方案
自增列赋值报错
GroupBy语法不兼容
中文乱码问题
日期函数不支持
大表迁移超时
解决:分批迁移数据,使用dmfldr工具直接导入,对大表先禁用索引和约束
索引已存在报错
解决:达梦schema内不允许索引名重复,如果之前的建表语句中,同一个表对相同的列建了多个索引,则会出现索引已存在报错,删除其中一个索引即可
字符超出长度报错
解决:达梦默认以字节为长度,实际长度定义并无问题,修改建表语句长度为原先3倍左右即可
关键词冲突
解决:加双引号
参考:https://eco.dameng.com/community/question/ca8b66b801647c1368485b4a1a1062fd
不支持的函数/关键词:
序号
mysql
dm
1
group_concat
wm_concat
2
date_sub
INTERVAL必须加单引号
3
substring_index
substr
4 ignore 不支持 5
is not true
不支持
6
use index
不支持
7
zerofill
不支持
8 after
不支持
参考:
性能优化建议
通过以上系统化的迁移方案,可以顺利完成MySQL到达梦数据库的迁移工作。根据数据量和业务需求选择合适的迁移工具,并特别注意应用程序的适配修改,这样才能确保迁移后系统的稳定运行。
MySQL迁移达梦数据库方案示例
1. 需求背景
xxxx测试环境,需要将已部署产品数据库从mysql迁移至达梦(dm8)数据库,适配信创改造。
2. 迁移产品及数据库列表
产品集 | 产品中文名 | 产品码 | xxxx目前版本 | 内部适配达梦版本 | 数据库Schema | 迁移进展 | 备注 |
底座 | xx容器云平台 | CHEGVA | 2.4.2 | 无需数据库 | |||
CNDNS | CNDNS | 1.19 | 1.20 | chegva | |||
mysql数据库地址及schema
数据库地址 | 数据库Schema | 实例规格 | 产品说明 |
10.96.110.112 | chegva | 8C16G | 云平台 |
cndns | |||
应用系统情况分析
序号 | 产品类型 | 产品型号 |
1 | 应用后台操作系统 | Red Hat Linux |
2 | 数据库后台操作系统 | Red Hat Linux |
3 | 后台数据库 | MySQL5.7 |
4 | 应用开发平台 | JAVA |
5 | 应用开发接口 | JDBC |
6 | 需要移植的数据库对象 | 表(数据量)、分区表视图 自定义类型触发器、存储过程、函数和其他 |
3. 迁移方案
3.1. 迁移前准备
确认版本信息:记录MySQL数据库版本配置,并使用兼容的达梦数据库(推荐DM8)
检查网络与存储:确保迁移机器能同时访问MySQL和达梦数据库,并有足够存储空间
3.2. 备份数据
备份待迁移mysql数据库、备份产品相关配置(如需要)
# 备份chegva数据库 mysqldump -h xxx -u root -p'***' --skip-triggers --skip-lock-tables --complete-insert --skip-extended-insert chegva > ./chegva-2025xxxx.sql
3.3. 迁移数据库至达梦
准备迁移工具:
数据迁移工具 DTS:提供了异构数据源之间的评估,迁移和对比功能。DM 数据迁移工具采用向导方式引导用户通过简单的图形化进行兼容性评估操作。
SQLark 百灵连接:支持对 ORACLE、MySQL、PostgreSQL 等主流数据库迁移到达梦数据库进行在线采集评估和自动转化,一键生成源数据库画像,获取源库对象、不兼容对象、大表、大字段表等迁移重难点情况,评估本次迁移需要投入的工作量。SQLark 会根据源库画像,生成合理的迁移策略,为开发者后续进行的自动/手动迁移提供迁移方案参考。
SQLark提供15天免费试用,如未购买,请勿提前安装,以免试用过期
迁移工具使用:
3.4. 应用发布
修改产品数据库配置信息,重新部署产品:
修改发布平台应用数据库连接参数为达梦连接配置,关联schema更改为达梦数据库
修改应用k8s集群中deploy、sts、cm、secret中mysql数据库连接配置为达梦数据库
修改应用程序配置文件、连接字符串为达梦数据库配置
3.5. 验证产品功能
白屏:应用控制台页面各组件标签显示正常
黑屏:应用error.log没有持续打印报错
产品发布自动化测试通过
测试平台平台各个组件测试用例能执行成功
应用链路验证成功
3.6. 回滚方案
切换应用达梦数据库连接配置为mysql连接配置,重新发布应用并验证产品功能
4. 迁移步骤
产品集迁移顺序:PASS平台(底座) → 中间件 → 应用核心组件 → 应用扩展组件 → 监控系统
