如何通过 DTS 将本地自建 MySQL 全量迁移到阿里云 RDS?

文章导读
使用阿里云 DTS 将本地自建 MySQL 全量迁移到 RDS 时,建议同时配置结构迁移、全量数据迁移和增量数据迁移,以实现业务不停服平滑上云。该方案适用于数据量较大或不能接受长时间停机的生产场景,迁移过程中源库需开启 binlog 且格式为 ROW。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

使用阿里云 DTS 将本地自建 MySQL 全量迁移到 RDS 时,建议同时配置结构迁移、全量数据迁移和增量数据迁移,以实现业务不停服平滑上云。该方案适用于数据量较大或不能接受长时间停机的生产场景,迁移过程中源库需开启 binlog 且格式为 ROW。

先说结论:DTS 全量 + 增量迁移是自建 MySQL 上云的标准方案,可确保数据一致性并最小化停机时间。

  • 适合:数据量超过 10GB 或业务不允许数小时停机的场景。
  • 先准备:确认源库 binlog 开启且格式为 ROW,创建具备 REPLICATION SLAVE 权限的账号。
  • 验收:迁移完成后对比源库与目标库的表数量、数据量及最后更新时间。

命令速用版

在配置 DTS 任务前,需在本地自建 MySQL 中执行以下检查与授权命令,确保源库满足迁移前提条件。

-- 检查 binlog 是否开启及格式是否为 ROW
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'binlog_format';

-- 创建迁移账号并授权(需 REPLICATION SLAVE 和 REPLICATION CLIENT 权限)
CREATE USER 'dts_user'@'%' IDENTIFIED BY 'password';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'dts_user'@'%';
FLUSH PRIVILEGES;

若本地 MySQL 为 5.6 版本,还需确保 binlog_row_image 设置为 full。

为什么会这样

DTS 迁移不仅仅是数据拷贝,而是建立源库与 RDS 之间的实时同步通道。单纯的全量迁移无法处理迁移过程中产生的新数据,必须配合增量迁移才能做到不停服。DTS 先全量拷贝存量数据,再持续拉取 binlog 同步增量更新,整个过程业务可读写,仅在最后切流时需要几十秒停机。

分步处理

按照以下标准流程操作,可降低迁移风险并确保数据完整。

1. 评估与准备
确认源库版本在 MySQL 5.1 至 8.4 之间,目标 RDS 实例存储空间大于源库已使用空间。若通过公网连接,需将 DTS 的 IP 段加入本地防火墙白名单,推荐使用专线或 VPC 对等连接。

2. 配置迁移任务
在 DTS 控制台创建任务,迁移类型勾选“结构迁移”、“全量数据迁移”和“增量数据迁移”。结构迁移会同步表、视图、触发器、存储过程等定义。

如何通过 DTS 将本地自建 MySQL 全量迁移到阿里云 RDS?

3. 执行迁移
启动任务后,DTS 会自动执行全量数据拷贝。全量完成后自动进入增量同步阶段,此时源库业务可正常写入。

4. 切换业务
当增量同步延迟接近 0 时,停止源库写入,确认 DTS 任务无延迟后,将应用数据库连接地址切换至 RDS 实例。切换前务必结束或释放 DTS 任务,避免任务自动恢复导致源端数据覆盖目标实例。

怎么验证是否生效

迁移完成后,需通过数据对比确认一致性,不能仅依赖 DTS 状态显示成功。

1. 基础一致性检查
对比源库与目标库的表数量是否相同,对应表的数据量(SELECT COUNT(*))是否一致。

2. 数据时效性检查
若表中有更新时间字段,对比最大更新时间(SELECT MAX(updateTime))是否一致。

3. 业务功能验证
在目标 RDS 实例上进行读写测试,确认应用连接正常且无报错。

常见坑

以下问题在迁移后容易导致应用报错,需提前排查。

1. 参数配置不一致
RDS 默认 max_allowed_packet 为 4MB,若源库有超大 BLOB 字段,需提前在 RDS 控制台调高该参数,否则导入时会截断。

如何通过 DTS 将本地自建 MySQL 全量迁移到阿里云 RDS?

2. 字符集乱码
若源库使用 utf8mb4,导出或迁移时需显式指定字符集,否则 emoji 等字符可能乱码。RDS 实例的 lower_case_table_names 参数值要和源库一致,否则大小写敏感的表名会找不到。

3. 权限重置
RDS 不允许用 root 登录,迁移后需用 RDS 创建的高权限账号重新授权,且不能授 GRANT OPTION 给普通应用账号。

4. 迁移期间 DDL 操作
增量迁移过程中不支持 DDL 操作,结构变更不会同步到目标实例,可能导致后续同步失败。

常见问题

迁移过程中业务需要停机吗?

配置增量迁移后,仅在最后切流切换数据库连接时需要几十秒停机,全量和增量同步阶段业务可正常读写。

本地 MySQL 版本有限制吗?

支持 MySQL 5.1、5.5、5.6、5.7、8.0、8.4 版本,目标 RDS 实例版本需兼容源库版本。

迁移任务失败会自动恢复吗?

DTS 会触发自动恢复,但在业务切换至目标实例前,务必先结束或释放该任务,避免自动恢复后源端数据覆盖目标实例。

小数据量也需要用 DTS 吗?

若数据量在 10GB 以内且允许数小时停机,可使用 mysqldump 导出 SQL 文本导入;大库或不可停服场景必须用 DTS。

参考来源

  • 如何将本地自建 MySQL 数据库完整迁移至阿里云 RDS 云数据库?
  • 从自建 MySQL 迁移至 RDS MySQL 实例
  • 数据迁移
  • 自建数据库迁移到云数据库_部署教程