从 MySQL 迁移到达梦数据库(DM8)

从 MySQL 迁移到达梦数据库(DM8)

前言

        达梦数据库(DM8)作为主流国产关系型数据库,兼容 MySQL 协议和大部分语法,是信创场景下 MySQL 迁移的核心选择。本文从迁移前准备、环境搭建、数据迁移、应用适配、验证优化五个阶段,详细讲解 。

一、迁移前准备:评估与规划

1. 环境与版本确认

核对项要求 / 说明
MySQL 版本支持 5.5/5.6/5.7/8.0 版本(8.0 部分新语法需单独适配)
达梦版本推荐 DM8 最新版本(如 DM8 2023 版),需匹配操作系统(x86 / 鲲鹏 / 飞腾)
操作系统达梦支持 Linux(CentOS / 麒麟 / 统信)、Windows,需与 MySQL 部署架构一致
资源评估达梦单机建议内存 ≥ 8G、CPU ≥ 4 核,数据盘空间 ≥ MySQL 数据量的 1.5 倍

2. 业务与数据评估

  • 语法兼容性检查:达梦虽兼容 MySQL 大部分语法,但需提前排查不兼容项:
  • 业务影响评估:确定迁移窗口(全量迁移建议选择低峰期),评估是否需要增量同步。
MySQL 特性达梦兼容情况适配方案
存储过程 / 自定义函数语法差异较大(如变量声明、游标)重新编写,适配达梦 PL/SQL 语法
触发器触发时机 / 语法略有差异重构触发器逻辑
索引类型(如 FULLTEXT)达梦不支持全文索引替换为达梦全文检索组件或 ES 辅助
数据类型(如 JSON)DM8 支持 JSON 类型,但函数略有差异替换为达梦 JSON 函数(如 JSON_GET → JSON_VALUE)
注释符(#达梦仅支持 --//* */批量替换注释符

数据量统计:通过 information_schema 统计 MySQL 库表大小、行数,确定迁移时长:

-- MySQL 统计各库数据量 SELECT TABLE_SCHEMA 数据库名, SUM(DATA_LENGTH + INDEX_LENGTH)/1024/1024 总大小(MB), COUNT(TABLE_NAME) 表数量 FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;

3. 工具准备

工具名称用途获取方式
达梦数据迁移工具(DTS)全量数据迁移(官方推荐)达梦安装包自带(dmdbms/tool/dts
DMHS增量数据同步(MySQL → 达梦)达梦官方提供(需单独申请授权)
Navicat/DBeaver语法校验、数据验证适配达梦的版本(需安装达梦驱动)
MySQL dump应急备份(可选)MySQL 自带

二、环境搭建:达梦数据库部署与配置

1. 达梦数据库安装(Linux 示例)

步骤 1:依赖安装
# CentOS 系统 yum install -y libaio-devel numactl-devel # 麒麟/统信系统 apt install -y libaio-dev numactl
步骤 2:创建用户与目录
# 创建达梦用户 useradd -m -d /home/dmdba -s /bin/bash dmdba passwd dmdba # 创建数据/日志目录 mkdir -p /dm8/data /dm8/log chown -R dmdba:dmdba /dm8
步骤 3:安装达梦
# 切换到达梦用户 su - dmdba # 执行安装包(以鲲鹏版本为例) ./dm8_setup.bin -i # 安装向导选择: # 1. 语言:中文 # 2. 安装类型:典型安装 # 3. 安装路径:/dm8 # 4. 确认安装,等待完成
步骤 4:初始化实例
# 进入达梦工具目录 cd /dm8/bin # 初始化实例(适配 MySQL 字符集,建议 UTF-8) ./dminit PATH=/dm8/data DB_NAME=DMDB INSTANCE_NAME=DMSERVER PORT_NUM=5236 CHARSET=1 # 说明:CHARSET=1 代表 UTF-8,PORT_NUM 可自定义(默认 5236)
步骤 5:启动达梦服务
# 注册服务 /dm8/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DMDB/dm.ini -p DMSERVER # 启动服务 systemctl start DmServiceDMSERVER # 查看状态 systemctl status DmServiceDMSERVER

2. 达梦兼容 MySQL 配置

修改达梦配置文件 dm.ini,开启 MySQL 协议兼容:

# 打开 dm.ini(路径:/dm8/data/DMDB/dm.ini) vi /dm8/data/DMDB/dm.ini # 修改以下参数 INSTANCE_NAME = DMSERVER PORT_NUM = 5236 # 达梦端口 MYSQL_PORT = 3306 # 兼容 MySQL 协议的端口(模拟 MySQL 端口) CHARSET = 1 # UTF-8 字符集 COMPATIBLE_MODE = 4 # 4=兼容 MySQL,0=达梦原生模式 SQL_COMPATIBLE = 'MYSQL' # SQL 语法兼容 MySQL

修改后重启达梦服务:

systemctl restart DmServiceDMSERVER

三、全量数据迁移:使用达梦 DTS 工具

        达梦数据迁移工具(DTS)是官方标配的可视化迁移工具,支持结构迁移、数据迁移、增量同步,操作简单且兼容性强。

1. 启动 DTS 工具

# 切换到达梦用户 su - dmdba # 启动可视化工具(需图形化界面,或远程连接) /dm8/tool/dts

若服务器无图形化界面,可通过 Windows 客户端安装达梦工具包,远程连接 MySQL 和达梦数据库。

2. 新建迁移项目

  1. 打开 DTS → 新建项目 → 填写项目名称(如 MySQL2DM8)→ 选择保存路径;
  2. 新建迁移任务 → 任务类型选择 “数据迁移”→ 下一步。

3. 配置源端(MySQL)

配置项填写说明
数据库类型选择 “MySQL”
主机名MySQL 服务器 IP
端口MySQL 端口(默认 3306)
数据库名需迁移的 MySQL 库名(或选 “全部”)
用户名 / 密码MySQL 有读写权限的账号
字符集选择与 MySQL 一致的字符集(如 utf8mb4)

配置完成后点击 “测试连接”,确认连接成功。

4. 配置目标端(达梦)

配置项填写说明
数据库类型选择 “DM8”
主机名达梦服务器 IP
端口达梦端口(默认 5236)
数据库名达梦实例名(如 DMDB)
用户名 / 密码达梦 SYSDBA 账号(默认密码 SYSDBA)
字符集UTF-8(与源端一致)

测试连接成功后,下一步。

5. 选择迁移对象

  1. 左侧勾选需要迁移的库、表、视图等对象;
  2. 点击 “对象映射”,检查表名、字段名映射(达梦默认大小写不敏感,可按需调整);
  3. 点击 “字段映射”,校验数据类型转换(DTS 会自动映射,如 MySQL INT → 达梦 INTEGER,VARCHAR → VARCHAR2);
    • 手动调整不兼容的字段类型(如 MySQL JSON → 达梦 JSON,或 VARCHAR2);
    • 处理字段长度(达梦 VARCHAR2 最大 4000,超过需改为 CLOB)。

6. 配置迁移选项

关键配置建议选择
迁移方式全量迁移(首次迁移)
存在相同表选择 “清空目标表数据后迁移” 或 “覆盖目标表”
批量提交行数根据数据量调整(如 1000 行 / 批)
迁移前预检查勾选(检查语法、类型兼容性)
生成迁移日志勾选(便于排查问题)

7. 执行迁移

  1. 点击 “完成”→ 执行任务;
  2. 查看迁移进度,若出现报错,根据日志提示修复(如字段类型不兼容、主键冲突等);
  3. 迁移完成后,查看 “迁移报告”,确认迁移成功率(100% 为最优)。

四、增量数据同步:使用 DMHS(可选)

若迁移窗口无法覆盖全量迁移(如数据量超大、业务不允许长时间停机),需通过达梦 DMHS 工具实现 MySQL 到 DM8 的增量同步,保证数据一致性。

1. DMHS 部署

  1. 下载 DMHS 安装包,分别部署在 MySQL 服务器(源端)和达梦服务器(目标端);

配置 MySQL 开启 binlog(必须):

# 修改 my.cnf log_bin = mysql-bin binlog_format = ROW # 行模式(DMHS 要求) server_id = 1 # 唯一 ID

2. 配置 DMHS 同步任务

  1. 编辑源端(MySQL)配置文件 dmhs_ora.ini(适配 MySQL 需调整驱动);
  2. 编辑目标端(达梦)配置文件 dmhs_dm.ini
  3. 启动 DMHS 服务,启动同步任务;
  4. 监控同步状态,确保增量数据实时同步。

五、应用适配:代码与配置修改

达梦兼容 MySQL 协议,大部分应用代码无需大幅修改,但需调整以下关键点:

1. 数据库连接配置

以 Java(Spring Boot)为例:

原 MySQL 配置
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver
达梦配置(兼容模式)
spring: datasource: # 达梦 MySQL 兼容端口连接 url: jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=utf8 username: SYSDBA password: SYSDBA driver-class-name: com.mysql.cj.jdbc.Driver # 或使用达梦原生驱动 # url: jdbc:dm://127.0.0.1:5236/DMDB?characterEncoding=utf8 # driver-class-name: dm.jdbc.driver.DmDriver

2. SQL 语法适配

MySQL 语法 / 函数达梦替代方案
LIMIT m,nROWNUM 或 OFFSET m ROWS FETCH NEXT n ROWS ONLY
CONCAT_WS(',', a, b)CONCAT(a, ',', b) 或自定义函数
NOW()SYSDATE 或 CURRENT_TIMESTAMP
IFNULL(a, b)NVL(a, b)
JSON_EXTRACT(json_col, '$.key')JSON_VALUE(json_col, '$.key')
INSERT IGNORE INTOMERGE INTO 或先查询后插入

3. 存储过程 / 函数重构

达梦支持 PL/SQL 语法,需将 MySQL 存储过程转换为达梦格式,示例:

MySQL 存储过程
DELIMITER // CREATE PROCEDURE get_user(IN uid INT, OUT uname VARCHAR(50)) BEGIN SELECT name INTO uname FROM user WHERE id = uid; END // DELIMITER ;
达梦等价存储过程
CREATE OR REPLACE PROCEDURE get_user(uid IN INT, uname OUT VARCHAR2) AS BEGIN SELECT name INTO uname FROM user WHERE id = uid; END; /

六、迁移验证与优化

1. 数据一致性验证

  • 行数校验:对比 MySQL 和达梦的表行数,确保一致:
-- 达梦查询表行数 SELECT TABLE_NAME, NUM_ROWS FROM DBA_TABLES WHERE OWNER='SYSDBA'; -- MySQL 查询表行数 SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='testdb';
  • 抽样校验:随机抽取部分数据,对比字段值(如主键、索引字段、大字段);
  • 业务校验:执行核心业务 SQL(查询、新增、修改、删除),验证结果与 MySQL 一致。

2. 性能优化

  • 索引优化:达梦索引语法与 MySQL 略有差异,需重新创建合适的索引(如主键索引、联合索引);
  • SQL 优化:达梦执行计划与 MySQL 不同,通过 EXPLAIN 分析慢 SQL,调整索引或 SQL 结构。

参数调优:根据服务器配置调整达梦 dm.ini 参数:

MEM_POOL_SIZE = 2048 # 内存池大小(建议物理内存的 50%) BUFFER_POOL_SIZE = 4096 # 数据缓冲区大小 SORT_BUF_SIZE = 1024 # 排序缓冲区大小

3. 故障回滚预案

若迁移后发现严重问题,需快速回滚:

  1. 停止应用写入达梦;
  2. 切换应用回 MySQL 数据库;
  3. 分析迁移问题,修复后重新执行迁移流程。

七、常见问题与解决方案

问题现象原因分析解决方案
迁移时报 “字段长度超出限制”达梦 VARCHAR2 最大 4000 字节将超长字段改为 CLOB 类型,或拆分字段
应用连接达梦时报 “驱动错误”驱动版本不匹配或 URL 格式错误使用达梦官方驱动,检查 JDBC URL 格式
索引迁移失败MySQL 全文索引 / 空间索引达梦不支持删除不兼容索引,改用达梦替代方案
存储过程执行报错语法不兼容(如变量声明、游标)按达梦 PL/SQL 语法重构存储过程
增量同步数据延迟DMHS 配置不当或网络问题调整 DMHS 同步频率,检查网络带宽

八、总结

从 MySQL 迁移到达梦数据库的核心是 “先评估、再迁移、后验证”:

  1. 迁移前充分评估数据量、语法兼容性、业务影响,避免踩坑;
  2. 优先使用达梦官方工具(DTS/DMHS),降低迁移复杂度;
  3. 应用适配阶段重点关注 SQL 语法、连接配置、存储过程重构;
  4. 迁移后必须做全量数据校验和业务测试,确保数据一致性和业务可用。

Read more

Ubuntu 24版本安装openclaw 3.2安装 bug:systemctl is-enabled unavailable Command failed

问题描述: 用户在将 OpenClaw 升级到版本 2026.3.2 后,在 Ubuntu 24.04 系统上运行安装脚本或启动仪表盘时遇到了错误。 具体错误信息为:Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service。 这意味着程序试图检查用户级 systemd 服务(openclaw-gateway.service)是否启用时失败了。在旧版本中正常工作,但在新版本中失效了。即使在全新的 Ubuntu 24.04 环境中或者尝试了 loginctl enable-linger 命令,问题依然存在。 根本原因推断: Ubuntu 24.04 及某些 Linux 发行版在非登录会话(non-login

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 google_geocoding_api — 让鸿蒙应用掌握全球地理位置解析(适配鸿蒙 HarmonyOS Next ohos)

Flutter for OpenHarmony:Flutter 三方库 google_geocoding_api — 让鸿蒙应用掌握全球地理位置解析(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter for OpenHarmony:Flutter 三方库 google_geocoding_api — 让鸿蒙应用掌握全球地理位置解析(适配鸿蒙 HarmonyOS Next ohos) 前言 在现代移动应用中,基于位置的服务(LBS)是交互的核心之一。无论是根据经纬度显示当前街道名称(逆地理编码),还是将用户输入的地址转换为地图上的精确坐标(地理编码),都需要一个强大且稳定的后端服务支撑。 在 Flutter for OpenHarmony 开发中,虽然我们可以使用多种地图服务,但 Google Geocoding API 以其全球范围内的覆盖深度和数据准确性,成为了许多出海应用或国际化项目的首选。今天,我们将实战如何利用 google_geocoding_api 库,在鸿蒙平台上实现精准的位置解析能力。 一、为什么集成 Google

By Ne0inhk
OpenClaw Ubuntu 安装指南

OpenClaw Ubuntu 安装指南

OpenClaw Ubuntu 安装指南 📋 目录 * 简介 * 系统要求 * 安装步骤 * 配置向导 * 常用命令 * 故障排除 * 参考资源 🤖 简介 OpenClaw 是一个运行在本地设备上的个人 AI 助手。它可以在您已经使用的渠道上回复您(WhatsApp、Telegram、Slack、Discord、Google Chat、Signal、iMessage、Microsoft Teams、WebChat),以及 BlueBubbles、Matrix、Zalo 和 Zalo Personal 等扩展渠道。它可以在 macOS/iOS/Android 上进行语音对话,并可以渲染您控制的实时 Canvas。Gateway 只是控制平面——产品本身才是助手。 OpenClaw 的核心特点: * 🌐 多渠道支持 -

By Ne0inhk