企业上云实践:数据库迁移方案

一、背景

对于众多企业来说,云的优势越来越明显,出于想使用成熟技术、减少运维成本、提升系统性能等方面的考虑,纷纷向“云”看齐。不过,在涉及到本地或云端的具体实施过程时,一个较为重要的问题就是数据的迁移。如何使用云服务商提供的迁移工具可以实现在自建应用不停服较长时间的情况下,平滑地完成自建数据库的迁移上云是一个首先需要解决的问题。

二、数据库迁移上云方案介绍

以阿里云为例:主要使用 DTS 服务,实现本地 IDC 与阿里云 RDS 的数据迁移。

不通的迁移方案应对不同的场景:

场景 迁移方案
本地 IDC 与阿里云机房,有专线 通过专线迁移
本地 IDC 与阿里云,无专线,但数据库可开通公网 IP 通过公网 IP 迁移
本地 IDC 与阿里云,无专线,且数据库不可开通公网 IP 通过 ECS 自建数据库与本地自建数据库搭成主从,再通过阿里云内网迁移
本地 IDC 与阿里云机房,有专线,但不是同一个主账号 通过 RDS 中转迁移,参考 使用DTS跨阿里云账号迁移RDS数据

三、数据库迁移基本原理

  • 结构迁移:将源库中待迁移对象的结构迁移至目标库(例如表、视图、触发器、存储过程等)。
  • 全量数据迁移:将源库中存量数据,全部迁移到目标库中。
  • 增量数据迁移:将与源库保持实时同步的状态,使用增量迁移功能,可以将系统迁移过程中的应用停机时间降低到分钟级别。

四、准备与注意事项

准备事项:

  • 已开通 RDS 服务
  • 已开通 DTS 服务
  • 源库网络可通,已创建账号,并连接测试通过
  • 目标库,已创建账号,并连接测试通过

注意事项:

  • 由于执行业务切换操作需要停止数据库写入并暂停业务,请选择业务低峰期操作以降低影响。
  • 由于源库区分大小写、目标库未区分大小写,会导致迁移失败,迁移前请将库名和表名全部改成小写。
  • 不同版本迁移,会存在由于语法差异导致视图或者触发器结构迁移失败,可以先忽略错误。
  • 增量迁移期间,不能执行 DDL 语句,否则会迁移中断。

五、操作实践:用户中心本地自建数据库迁移至阿里云RDS

基本信息:

源库信息 目标库信息
数据库版本 MariaDB 10.1.19 MySQL 5.7
机房区域 北京亦庄 华为2(北京)
数据量 170 GB
要求 1. 分钟级停服;2. 失败可回退。
迁移方案 公网 IP + 结构 + 全量 + 增量

操作步骤:

1、进入 DTS 控制台,创建迁移任务

2、配置源库和目标库,并连接测试通过

3、选择迁移类型和列表

4、预检查

5、启动迁移任务

6、实时跟踪迁移进度

7、将业务中断,禁止新的数据写入源数据库

8、结束数据迁移任务

观察迁移任务的进度为增量迁移,并显示为无延迟状态时,将源库停写几分钟,等待迁移任务的增量迁移再次进入无延迟状态后,手动结束迁移任务。

9、创建反向数据迁移任务并启动

用于将目标库后续产生增量数据迁移回源数据库,此步骤创建的反向迁移任务的作用是为业务提供回退方案,业务恢复运行后,一旦出现异常可将业务切换至原有的数据库中。

⚠️ 警告:在配置反向数据迁移任务时,在设置迁移类型及列表环节仅需选择增量数据迁移