华为云 DRS 数据迁移实操:本地 MySQL 全量+增量迁移到 RDS 全流程

举报
yd_288136036 发表于 2026/11/11 09:16:34 2026/11/11
【摘要】 数据库上云的第一步,往往不是买一台云数据库,而是把老库的数据安全、完整、不停机地搬过去。本文以一次真实场景为例,记录用华为云 DRS(数据复制服务)把本地机房一台 MySQL 5.7 迁移到华为云 RDS MySQL 的全流程,覆盖网络打通、账号准备、预检查、任务创建、启动监控、割接和数据校验,文末附可直接运行的 hcloud 命令与 API 示例。 一、DRS 是什么,适合什么场景DRS ...

数据库上云的第一步,往往不是买一台云数据库,而是把老库的数据安全、完整、不停机地搬过去。本文以一次真实场景为例,记录用华为云 DRS(数据复制服务)把本地机房一台 MySQL 5.7 迁移到华为云 RDS MySQL 的全流程,覆盖网络打通、账号准备、预检查、任务创建、启动监控、割接和数据校验,文末附可直接运行的 hcloud 命令与 API 示例。

一、DRS 是什么,适合什么场景

DRS 是华为云提供的数据在线迁移、同步与灾备服务。针对“本地 MySQL 迁移到云上 RDS MySQL”这一场景,应选择实时迁移,迁移模式选择全量+增量。它的工作方式分三个阶段:第一阶段全量迁移,把源库现有的数据、表结构整体搬运到目标库;第二阶段增量同步,通过解析源库的 binlog,把全量期间以及之后产生的新增、修改、删除持续同步到目标库;第三阶段割接,当增量时延趋近于零时,短暂停写业务,把连接切换到目标库。全程业务基本不用长时间停机,适合不能接受长时间停服的核心业务库。

二、迁移前准备:网络

本地库与云上 RDS 不在同一网络,先打通网络是第一步。DRS 支持三种网络类型:公网网络最简单,源库有公网 IP 即可,但数据走公网,生产环境不推荐;VPN 或者专线网络是生产首选,通过 VPN 网关或云专线打通本地 IDC 与云上 VPC,DRS 实例走内网访问源库;VPC 网络适用于源库本身就在华为云 ECS 上的场景。我们的方案选择 VPN:先在华为云创建 VPN 网关,与本地防火墙建立 IPsec 隧道,并在 VPC 路由表里加好去往本地网段的路由。随后要确认安全组放通:DRS 实例所在子网能够访问源库 3306 端口和目标 RDS 的 3306 端口,本地防火墙放通来自 DRS 实例子网的访问,RDS 安全组放通 DRS 实例子网。网络不通是预检查最常见的失败原因,务必先用 telnet 或 nc 从一台同网段的测试机验证 3306 连通性。

三、迁移前准备:账号与参数

源库需要一个迁移专用账号,权限要一次给够,避免预检查反复失败。建议这样创建:

CREATE USER 'drs_migrate'@'%' IDENTIFIED BY 'YourStrongPassword123!';
GRANT SELECT, SHOW VIEW, EVENT, LOCK TABLES, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT, PROCESS ON *.* TO 'drs_migrate'@'%';
FLUSH PRIVILEGES;

其中 REPLICATION SLAVE 与 REPLICATION CLIENT 是增量同步读取 binlog 的关键权限,缺了它们,全量能跑、增量必失败。源库参数也要检查:binlog 必须开启,且 binlog_format 必须是 ROW,推荐 binlog_row_image 为 FULL;server_id 必须设置且在整个复制拓扑中唯一;如果源库开了 GTID,目标库也要开启 GTID,保持两侧一致;字符集建议两侧统一为 utf8mb4。目标 RDS 侧使用高权限账号,DRS 在迁移期间会把目标库置为只读,防止迁移过程中有业务写入造成冲突,割接完成后才解除只读。目标库磁盘空间建议预留源库数据量的 1.5 倍以上。

四、创建迁移任务(hcloud)

环境准备好后,用 KooCLI(hcloud)创建迁移任务。先确认本地已安装 hcloud 并完成 AK/SK 与区域配置,然后执行:

hcloud DRS CreateJob \
  --cli-region=cn-north-4 \
  --job_type=migration \
  --job.name=drs-mysql-to-rds-demo \
  --job.task_type=FULL_INCR_TRANS \
  --job.net_type=vpn \
  --job.direction=up

关键参数说明:job_type=migration 表示实时迁移;task_type=FULL_INCR_TRANS 表示全量加增量;net_type=vpn 表示走 VPN 或专线网络;direction=up 表示入云方向,即本地到云上;node_type 迁移任务只支持 high 规格。实际执行时还需要补齐源端与目标端的连接信息、VPC 与子网、迁移对象等参数,完整参数列表可以用 hcloud DRS CreateJob --help 查看。也可以在控制台用向导创建,效果相同。

五、预检查与启动

任务创建后不要急于启动,先跑预检查:

hcloud DRS BatchCheckJobs \
  --cli-region=cn-north-4 \
  --jobs.1.id=<job_id>

hcloud DRS ShowJobDetail \
  --cli-region=cn-north-4 \
  --job_id=<job_id> \
  --type=detail

预检查覆盖连接性、账号权限、数据库参数、对象兼容性和容量空间等上百项。常见失败项有三类:网络或防火墙未放通导致源库连通失败;账号缺少 REPLICATION SLAVE 等权限;binlog 未开启或格式不是 ROW。按提示逐项修复后重新检查,直到全部通过。预检查通过后启动任务:

hcloud DRS BatchStartJobs \
  --cli-region=cn-north-4 \
  --jobs.1.id=<job_id>

启动后在控制台观察状态流转:CONFIGURATION、FULL_TRANSFER_STARTED、FULL_TRANSFER_COMPLETE、INCRE_TRANSFER_STARTED、INCRE_TRANSFER_COMPLETE。也可以调用 ShowJobDetail 查询进度与增量时延。

六、割接与数据校验

当增量时延趋近于零(通常小于 1 秒)时进入割接窗口:先短暂停止业务写入,确认增量完全追平;然后解除目标 RDS 的只读状态,把业务连接串从本地 MySQL 切换到 RDS;验证业务读写正常后,结束 DRS 任务。校验分两层:对象级对比检查表、视图、索引、存储过程等定义是否一致;数据级对比检查行数与内容是否一致。DRS 内置对比任务可以这样创建:

hcloud DRS CreateCompareTask \
  --cli-region=cn-north-4 \
  --job_id=<job_id> \
  --object_level_compare_type=objects

也可以用 SQL 抽查:

SELECT COUNT(*) FROM orders;
CHECKSUM TABLE orders;

七、常见报错与处理

连接失败 Communications link failure:检查 VPN、专线、安全组与防火墙,确认源库 IP 与端口正确;Access denied:核对账号密码,用 SHOW GRANTS 确认权限;binlog is not opened:修改 my.cnf 开启 log_bin 后重启;binlog_format is not ROW:执行 SET GLOBAL binlog_format=‘ROW’ 并修改配置文件;Could not find first log file:源库 binlog 被清理,增大 expire_logs_days 后重新全量;GTID mode mismatch:统一两侧 GTID 配置;Table already exists:迁移前清空目标库;Disk full:扩容 RDS 存储。

八、总结

一次顺利的 DRS 迁移,七成工作在迁移之前:网络打通、权限给够、参数改对、预检查跑通。任务本身按向导走并不复杂,关键是割接前确认增量时延归零、割接后做好对象与数据两层校验。建议第一次迁移先用测试库全流程演练一遍,记录每个环节耗时,再安排生产割接窗口,这样心里才有底。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。