一、适用场景
本方案适用于与 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服务实现结构迁移、全量数据迁移及增量同步。迁移过程保持源库运行,先完成表结构转换与全量数据迁移,再通过增量同步捕获迁移期间变更,最终通过停机窗口切换业务流量至目标库。方案确保数据一致性并最小化业务中断时间。
迁移原理
数据迁移过程包括三个阶段,即结构迁移、全量数据迁移和增量数据迁移。 如果需要在迁移期间保持源数据库的正常运行,当您在配置迁移任务时,必须将结构迁移、全量数据迁移和增量数据迁移都选为所需的迁移类型。
结构迁移:在迁移数据之前,DTS需要在目标数据库中重新创建数据结构。对于异构数据库之间的迁移,DTS会解析源数据库的DDL代码,将代码转换成目标数据库的语法,然后在目标数据库中重新创建结构对象。
全量数据迁移:在全量数据迁移阶段,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 |
重要 RENAME TABLE操作可能导致迁移数据不一致。
|
数据校验方案
全量校验:对目标对象的存量数据进行对比。
结构校验:对目标对象的库表结构进行对比。
增量校验:对同步或迁移实例的增量任务中,源库执行过DML变更操作的对象的数据进行对比。
校验流程图
校验原理
模块 | 技术实现 |
行数对比 |
|
哈希校验 | 使用 |
字段级对比 | 通过 SQL JOIN 或工具(如 |
延迟监控 | DTS 控制台或 API 提供同步延迟指标(如秒级延迟)。 |
结构校验 | 对比数据库元数据(如 |
自动化脚本 | Python/Shell 脚本定期执行校验任务,并推送告警。 |
注意事项
经典网络的数据库实例暂不支持增量数据校验功能。
开启多表归并的实例暂不支持数据校验功能。
运行状态为已完成的实例暂不支持数据校验功能。
若待校验的表为无主键且无唯一索引的表,则该表的数据超过10000行时DTS将不会进行数据校验。
若待校验的数据既没有主键约束也没有唯一约束,则DTS将不会进行增量数据校验。
若同步或迁移实例进行重启操作(例如先暂停再启动),则实例中的全量校验任务会重新开始校验。
若目标表为空表,DTS将不会对其进行数据校验。
在执行校验任务前需评估源库和目标库的性能,同时建议您在业务低峰期执行数据校验(例如源库和目标库的CPU负载在30%以下)。因为DTS在进行数据校验时将占用源库和目标库一定的读资源,可能会导致数据库的负载上升。在数据库性能较差、规格较低或业务量较大的情况下,可能会加重数据库压力,甚至导致数据库服务不可用。
在同步或迁移实例中配置的校验任务,数据校验方式的可勾选项与同步类型或迁移类型密切相关。例如,迁移实例的迁移类型只选择了增量迁移,在配置数据校验方式时则只允许勾选增量校验。
增量校验任务仅支持校验增量同步或增量迁移任务中变更的数据,不支持校验手动在目标库中变更的数据。
在校验任务列表配置的校验任务,不支持增量校验。
采用按行抽样进行全字段校验方式对少量数据进行数据校验时,设置的抽样百分比将不会生效,默认为100%。
采用按行抽样进行全字段校验方式对MongoDB进行数据校验时,抽样百分比默认为100%,且不支持修改。
若全量校验模式选择了按行抽样进行全字段校验,则不建议同时使用ETL功能。否则,ETL功能修改后的数据会被校验为不一致数据。
不支持校验物化视图。
在全量校验过程中,若单张表中存在差异的数据超过100000行,DTS将终止对该表的校验。请在差异数据量减少后,重新对该表进行校验。
若源端或目标端Redis实例的认证方式为账号+密码登录,暂不支持数据校验功能。
若待校验对象中存在隐藏列,则可能会对结构校验结果产生影响。
四、实施过程
配置DTS迁移任务
进入目标地域的迁移任务列表页面(如下图)。
登录数据传输服务DTS控制台。
在左侧导航栏,单击数据迁移。
在页面左上角,选择迁移实例所属地域。
单击创建任务,进入任务配置页面。
配置源库及目标库信息(如下图),具体字段释义见列表。
配置完成后,在页面下方单击测试连接以进行下一步。
配置任务对象:
在对象配置页面,配置待迁移的对象,具体字段释义见列表。
单击下一步高级配置,进行高级参数配置,具体字段释义见列表。
单击下一步数据校验,进行数据校验任务配置。
若您需要使用数据校验功能,配置方法请参见配置数据校验。
保存任务并进行预检查:
若您需要查看调用API接口配置该实例时的参数信息,请将鼠标光标移动至下一步保存任务并预检查按钮上,然后单击气泡中的预览OpenAPI参数。
若您无需查看或已完成查看API参数,请单击页面下方的下一步保存任务并预检查。
购买实例:
预检查通过率显示为100%时,单击下一步购买。
在购买页面,选择数据迁移实例的链路规格,详细说明请参见下表。
配置完成后,阅读并选中《数据传输(按量付费)服务条款》。
单击购买并启动,并在弹出的确认对话框,单击确定。
您可以在迁移任务列表页面,查看迁移实例的具体进度。