MySQL迁移至达梦数据库全攻略

迁移概述

将MySQL数据库迁移至达梦数据库是国产化替代过程中的常见信创改造需求。达梦数据库提供了多种迁移工具和方法,使得迁移过程可以高度自动化。根据数据量和业务复杂度的不同,迁移工作可以在几十分钟到数小时完成。

主要迁移方式对比

迁移方式适用场景优点缺点
SQLark百灵连接30GB以下数据量,追求效率的场景图形化操作,几分钟完成,一次成功率90%以上需下载独立工具
DM数据迁移工具(DTS)大多数迁移场景,尤其是中小型数据库官方图形化工具,功能全面,向导式操作对大表迁移需特殊处理
命令行工具(dmfldr)超大型数据库,批量数据处理高性能,适合脚本化自动化迁移操作复杂,需手动转换格式

迁移流程图

MySQL迁移至达梦数据库全攻略

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左右数据的迁移。

操作步骤:

  1. 创建迁移任务:在SQLark中点击"数据迁移",选择"仅数据迁移"

  2. 连接数据库:从客户端导入或新建MySQL(源库)和达梦(目标库)连接

  3. 选择迁移范围:支持全量迁移或指定范围迁移,对大表可单独设置只迁结构不迁数据

  4. 环境检查:工具自动检查目标库磁盘空间和参数,按提示解决不通过项

  5. 自动化迁移:工具全自动执行迁移,可实时查看进度

  6. 迁移校验:完成后查看对象数量和表行数是否一致

使用达梦DTS迁移

达梦自带的DTS工具更适合大多数常规迁移场景。

详细步骤:

  1. 打开迁移工具

    • 通过"开始"菜单 → "达梦数据库" → "DM数据迁移工具"

  2. 创建迁移工程

    • 右键"迁移管理" → "新建工程",输入工程名称

    • 在工程下右键"新建迁移",自定义迁移名称

  3. 配置数据源

    • MySQL源库:选择"MySQL ==> DM"迁移类型

      • 主机名、端口(默认3306)、用户名、密码

      • 指定MySQL驱动包(除DM自带包外需手动提供)

      • 选择要迁移的具体数据库

    • 达梦目标库

      • 主机名、端口(默认5236)、用户名(默认SYSDBA)、密码(默认SYSDBA)

      • 目的模式选择对应的达梦数据库

  4. 选择迁移对象

    • 点击"选择"勾选需要迁移的表,支持全选

    • 高级选项中可设置字符集转换(通常UTF8→UTF-8或GB18030)

  5. 审阅并执行迁移

    • 确认配置信息无误后点击"完成"开始迁移

    • 监控迁移进度,处理出现的错误

迁移出错处理

常见的如字段长度不足错误,可在达梦中修改字段长度后,选择"重新迁移出错的对象"。

迁移后校验与适配

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

常见问题与解决方案

  1. 自增列赋值报错

    • 问题:"无法给自增列赋值"

    • 解决:达梦无法直接对自增列赋值,需改为序列值或设置IDENTITY_INSERT为ON

  2. GroupBy语法不兼容

    • 问题:"不是GROUP BY表达式"

    • 解决:设置COMPATIBLE_MODE=4并重启数据库

  3. 中文乱码问题

    • 解决:确保达梦数据库使用GB18030或UTF-8字符集,在迁移工具中正确设置字符集转换

  4. 日期函数不支持

    • 解决:达梦不支持CURRENT_TIMESTAMP作为默认值,迁移后需执行:ALTER TABLE table_name MODIFY column_name DEFAULT sysdate

  5. 大表迁移超时

    • 解决:分批迁移数据,使用dmfldr工具直接导入,对大表先禁用索引和约束

  6. 索引已存在报错

    1. 解决:达梦schema内不允许索引名重复,如果之前的建表语句中,同一个表对相同的列建了多个索引,则会出现索引已存在报错,删除其中一个索引即可

  7. 字符超出长度报错

    1. 解决:达梦默认以字节为长度,实际长度定义并无问题,修改建表语句长度为原先3倍左右即可

    2. 参考:达梦数据库初始化实例参数说明

  8. 关键词冲突

    1. 解决:加双引号

    2. 参考:https://eco.dameng.com/community/question/ca8b66b801647c1368485b4a1a1062fd

    3. 不支持的函数/关键词:

      序号

      mysql

      dm

      1

      group_concat

      wm_concat

      2

      date_sub

      INTERVAL必须加单引号

      3

      substring_index

      substr

      4ignore
      不支持

      5

      is not true  

      不支持

      6

      use index

      不支持

      7

      zerofill

      不支持

      8

      after

      不支持

参考:

性能优化建议

  • 迁移前:在达梦数据库中适当增大BUFFER参数

  • 迁移中:对大表禁用索引和约束,迁移后重建

  • 迁移后:执行统计信息收集:CALL SP_TAB_STAT_INIT('SYSDBA', 'TABLE_NAME');

通过以上系统化的迁移方案,可以顺利完成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平台(底座) → 中间件 → 应用核心组件 → 应用扩展组件 → 监控系统

4.1. 底座迁移

4.2. 中间件迁移

4.3. xx核心组件迁移

4.4. xx扩展组件迁移

4.5. 监控系统迁移

5. 问题纪录


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6544.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注