华为云RDS MySQL迁移到阿里云RDS MySQL方案

一、适用场景

本方案适用于与 HUAWEI RDS MySQL 迁移至 阿里云 RDS MySQL 场景。

迁移类型适用于:库表结构迁移、全量数据迁移、增量数据迁移。

网络适用场景:公网迁移、内网迁移、专线迁移。

二、迁移相关工具介绍

阿里云数据传输服务 DTS

数据传输(Data Transmission,简称DTS)是阿里云提供的一种支持RDBMS(关系型数据库)、 NoSQL、OLAP等多种数据源之间数据交互的数据服务。它提供了数据迁移、实时数据订阅及数据 实时同步等多种数据传输能力。通过数据传输可实现不停服数据迁移、数据异地灾备、跨境数据同 步、缓存更新策略等多种业务应用场景,可构建安全、可扩展、高可用的数据架构。数据传输服务DTS的目标是将复杂的数据交互工作承担下来,让客户可以专注于上层的业务开发,数据传输服务承诺99.5%的链路稳定性及99.999%的数据可靠性。数据传输服务DTS支持多种数据源类型,例如: 关系型数据库MySQL、SQLServer、Oracle、PostgreSQL、DRDS、PetaData、OceanBase;NoSQL:MongoDB、Redis(需暴露日志)、流计算。

三、方案介绍

迁移方案

方案概述

采用DTS迁移华为云 MySQL到阿里云 RDS 方案。通过阿里云DTS服务实现结构迁移、全量数据迁移及增量同步。迁移过程保持源库运行,先完成表结构转换与全量数据迁移,再通过增量同步捕获迁移期间变更,最终通过停机窗口切换业务流量至目标库。方案确保数据一致性并最小化业务中断时间。

image.png

迁移原理

数据迁移过程包括三个阶段,即结构迁移、全量数据迁移和增量数据迁移。 如果需要在迁移期间保持源数据库的正常运行,当您在配置迁移任务时,必须将结构迁移、全量数据迁移和增量数据迁移都选为所需的迁移类型。

  • 结构迁移:在迁移数据之前,DTS需要在目标数据库中重新创建数据结构。对于异构数据库之间的迁移,DTS会解析源数据库的DDL代码,将代码转换成目标数据库的语法,然后在目标数据库中重新创建结构对象。

  • 全量数据迁移:在全量数据迁移阶段,DTS会将源数据库的存量数据全部迁移到目标数据库。 源数据库保持运行状态,在迁移过程中仍不断进行数据更新。 DTS使用增量数据读取模块来获取全量数据迁移过程中发生的数据更新。 当全量数据迁移开始时,增量数据读取模块将被激活。在全量数据迁移阶段,增量数据会被解析、重新格式化并存储在本地DTS服务器上。

  • 增量数据迁移:当全量数据迁移完成后,DTS会检索本地存储的增量数据,重新格式化,并将数据更新应用到目标数据库中。 此过程将持续下去,直到所有正在进行的数据变更都复制到目标数据库,并且源数据库和目标数据库完全同步。

DTS迁移原理

前置条件

  • 网络打通:打通DTS到源端与目标端的网络。

  • 操作DTS工具的阿里云子账号需授权:AliyunDTSDefaultRole。

  • 创建源端、目标端数据库迁移账号并授权。权限大小如下:

数据库

库表结构迁移/全量迁移

增量迁移

RDS 实例

SELECT权限

读写权限

目标RDS 实例

读写权限

读写权限

  • 需提前配置源端RDS MySQL的白名单规则,将添加DTS服务器的IP地址段添加到入站规则中。

  • 目标RDS 实例的存储空间须大于源RDS 实例占用的存储空间。

风险及注意项

  • 在全量同步和增量同步过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新、删除操作,可能会导致数据不一致。

  • 如需进行增量迁移,Binlog日志需开启且至少保留24小时(建议3天以上)。

  • 请勿在链路创建阶段执行库或表结构变更的DDL操作,否则数据迁移链路建立会失败。

  • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

  • 建议源和目标库的MySQL版本保持一致,以保障兼容性。

  • 执行全量数据迁移会占用源库和目标库的读写资源,需在业务低峰进行数据迁移。

  • 如果源库中待迁移的表没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。

  • DTS会自动地在阿里云RDS 中创建数据库,如果待迁移的数据库名称不符合阿里云RDS的定义规范,需在配置迁移任务之前在阿里云RDS中创建数据库。

  • 对于迁移失败的任务,DTS会触发自动恢复。在将业务切换至目标实例前,需要先结束或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。

  • 支持增量迁移的SQL操作如下

操作类型

SQL操作语句

DML

INSERT、UPDATE、DELETE

DDL

  • ALTER TABLE、ALTER VIEW

  • CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW

  • DROP INDEX、DROP TABLE

  • RENAME TABLE

重要

RENAME TABLE操作可能导致迁移数据不一致。

  • TRUNCATE TABLE

数据校验方案

  • 全量校验:对目标对象的存量数据进行对比。

  • 结构校验:对目标对象的库表结构进行对比。

  • 增量校验:对同步或迁移实例的增量任务中,源库执行过DML变更操作的对象的数据进行对比。

校验流程图

image.png

校验原理

模块

技术实现

行数对比

COUNT(*) 查询或数据库内置统计函数(如 CHECKSUM TABLE)。

哈希校验

使用 MD5SHA-1 或数据库内置哈希函数生成数据指纹。

字段级对比

通过 SQL JOIN 或工具(如 pt-table-checksum)对比字段值。

延迟监控

DTS 控制台或 API 提供同步延迟指标(如秒级延迟)。

结构校验

对比数据库元数据(如 INFORMATION_SCHEMA.COLUMNS)或使用 DTS 结构对比功能。

自动化脚本

Python/Shell 脚本定期执行校验任务,并推送告警。

注意事项

  • 经典网络的数据库实例暂不支持增量数据校验功能。

  • 开启多表归并的实例暂不支持数据校验功能。

  • 运行状态为已完成的实例暂不支持数据校验功能。

  • 若待校验的表为无主键且无唯一索引的表,则该表的数据超过10000行时DTS将不会进行数据校验。

  • 若待校验的数据既没有主键约束也没有唯一约束,则DTS将不会进行增量数据校验。

  • 若同步或迁移实例进行重启操作(例如先暂停再启动),则实例中的全量校验任务会重新开始校验。

  • 若目标表为空表,DTS将不会对其进行数据校验。

  • 在执行校验任务前需评估源库和目标库的性能,同时建议您在业务低峰期执行数据校验(例如源库和目标库的CPU负载在30%以下)。因为DTS在进行数据校验时将占用源库和目标库一定的读资源,可能会导致数据库的负载上升。在数据库性能较差、规格较低或业务量较大的情况下,可能会加重数据库压力,甚至导致数据库服务不可用。

  • 在同步或迁移实例中配置的校验任务,数据校验方式的可勾选项与同步类型或迁移类型密切相关。例如,迁移实例的迁移类型只选择了增量迁移,在配置数据校验方式时则只允许勾选增量校验。

  • 增量校验任务仅支持校验增量同步或增量迁移任务中变更的数据,不支持校验手动在目标库中变更的数据。

  • 在校验任务列表配置的校验任务,不支持增量校验。

  • 采用按行抽样进行全字段校验方式对少量数据进行数据校验时,设置的抽样百分比将不会生效,默认为100%。

  • 采用按行抽样进行全字段校验方式对MongoDB进行数据校验时,抽样百分比默认为100%,且不支持修改。

  • 若全量校验模式选择了按行抽样进行全字段校验,则不建议同时使用ETL功能。否则,ETL功能修改后的数据会被校验为不一致数据。

  • 不支持校验物化视图。

  • 在全量校验过程中,若单张表中存在差异的数据超过100000行,DTS将终止对该表的校验。请在差异数据量减少后,重新对该表进行校验。

  • 若源端或目标端Redis实例的认证方式为账号+密码登录,暂不支持数据校验功能。

  • 若待校验对象中存在隐藏列,则可能会对结构校验结果产生影响。

四、实施过程

配置DTS迁移任务

  • 进入目标地域的迁移任务列表页面(如下图)。

image.png

  • 单击创建任务,进入任务配置页面。

  • 配置源库目标库信息(如下图),具体字段释义见列表。

image.png

  • 配置完成后,在页面下方单击测试连接以进行下一步

  • 配置任务对象:

    • 对象配置页面,配置待迁移的对象,具体字段释义见列表。

  • 单击下一步高级配置,进行高级参数配置,具体字段释义见列表。

  • 单击下一步数据校验,进行数据校验任务配置。

  • 若您需要使用数据校验功能,配置方法请参见配置数据校验

  • 保存任务并进行预检查:

    • 若您需要查看调用API接口配置该实例时的参数信息,请将鼠标光标移动至下一步保存任务并预检查按钮上,然后单击气泡中的预览OpenAPI参数

    • 若您无需查看或已完成查看API参数,请单击页面下方的下一步保存任务并预检查

  • 购买实例:

    • 预检查通过率显示为100%时,单击下一步购买

    • 购买页面,选择数据迁移实例的链路规格,详细说明请参见下表。

    • 配置完成后,阅读并选中《数据传输(按量付费)服务条款》

    • 单击购买并启动,并在弹出的确认对话框,单击确定

    • 您可以在迁移任务列表页面,查看迁移实例的具体进度。

配置数据校验任务

  • 进入数据校验页面。

    • 新创建的DTS实例:进入方法,请参见同步方案概览迁移方案概览中的相关配置文档。

    • 已创建完成的DTS实例:

      • 进入同步或迁移任务列表页面。

      • 单击目标实例ID。

      • 基本信息任务管理页面中单击创建校验任务

  • 设置数据校验方式

  • 设置校验对象

    • 您可以在已选择对象框中勾选不需要进行数据校验的对象。

  • 配置校验告警。

  • 根据提示及相关配置文档,完成后续配置。