MySQL迁移到达梦怎么做?信创数据库低停机迁移实战
把MySQL迁移到达梦,如果只是迁移一批静态数据,可以停机后导出再导入。但在生产环境中,MySQL通常还在持续产生订单、用户、库存等业务数据,几百GB甚至更大的数据库也很难在短时间内完成迁移。
更稳妥的方法是先迁移表结构和历史数据,再通过MySQL Binlog持续同步INSERT、UPDATE、DELETE等增量变更。等达梦中的数据追平MySQL并通过校验后,只需要在最后切换阶段暂停写入一小段时间。
这套方案可以概括为:
迁移评估 → 结构迁移 → 全量初始化 → Binlog增量同步 → 数据校验 → 应用切换

本文以CloudCanal为例,介绍MySQL迁移到达梦的准备工作、配置过程、常见兼容性问题和低停机切换步骤。如果已经完成前期评估,只想看工具配置,可以直接跳到“使用CloudCanal迁移MySQL到达梦”一节。
MySQL迁移到达梦,具体要迁移什么?
一次完整的数据库迁移通常包含四部分。
1. 表结构
包括表、字段、主键、索引、默认值和字段注释等。MySQL和达梦的SQL语法、字段类型及数据库对象并不完全相同,不能简单地把MySQL的SHOW CREATE TABLE结果直接拿到达梦执行。
2. 历史数据
也就是迁移开始前已经存在于MySQL中的数据。这部分通常通过全量扫描读取,再分批写入达梦。
3. 增量数据
全量迁移可能需要运行数小时甚至数天。在此期间,MySQL仍然会产生新的INSERT、UPDATE和DELETE操作。这些变化需要通过Binlog捕获并继续写入达梦,否则全量迁移结束时,两边的数据仍然不一致。
4. 应用兼容性
应用中的SQL、数据库驱动、分页语法、函数、存储过程和大小写规则也可能需要修改。
数据迁移工具可以帮助迁移表结构和数据,但不能默认解决所有应用兼容问题。尤其是存储过程、触发器、复杂函数和MySQL特有SQL,需要单独梳理和测试。
迁移前先检查MySQL
正式创建迁移任务前,先确认MySQL的版本、数据规模 、Binlog配置、表结构和账号权限。
检查MySQL版本和字符集
SELECT VERSION();
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
这条链路支持的MySQL字符集包括utf8、utf8mb4和latin1。如果源库使用其他字符集,不能直接假设兼容,应先用包含中文、特殊符号和Emoji的数据进行测试。
统计库表和数据规模
SELECT
table_schema,
COUNT(*) AS table_count,
ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2)
AS total_size_gb
FROM information_schema.tables
WHERE table_schema NOT IN (
'information_schema',
'mysql',
'performance_schema',
'sys'
)
GROUP BY table_schema
ORDER BY total_size_gb DESC;
继续找出数据量较大的表:
SELECT
table_schema,
table_name,
table_rows,
ROUND((data_length + index_length) / 1024 / 1024, 2)
AS total_size_mb
FROM information_schema.tables
WHERE table_schema = 'your_database'
ORDER BY data_length + index_length DESC
LIMIT 20;
这些数据可以用来估算迁移时间,也方便把超大表拆成单独任务,避免少数大表拖慢整个迁移过程。需要注意,InnoDB的table_rows通常是估算值,不能作为最终数据校验结果。
找出没有主键的表
SELECT
t.table_schema,
t.table_name
FROM information_schema.tables t
LEFT JOIN information_schema.table_constraints c
ON t.table_schema = c.table_schema
AND t.table_name = c.table_name
AND c.constraint_type = 'PRIMARY KEY'
WHERE t.table_schema = 'your_database'
AND t.table_type = 'BASE TABLE'
AND c.constraint_name IS NULL;
无主键表是增量同步中需要重点处理的对象。
CloudCanal的MySQL到达梦链路支持常见DML同步。其中,无主键表的UPDATE和DELETE默认不同步,需要在创建任务时手动勾选相关选项。
即使工具允许同步,也建议先评估无主键表的数据量和更新频率。因为缺少唯一标识时,目标端定位记录的成本和不确定性都会增加。能够补充合理主键的表,最好在正式迁移前完成整改。
