使用 AWS Database Migration Service (AWS DMS) 进行数据迁移
什么是 AWS 数据库迁移服务 (AWS DMS)?
AWS Database Migration Service (AWS DMS) 顾名思义,是将数据库迁移到 AWS 的服务。
其特点如下。
- 可轻松将数据库数据迁移到 AWS 的托管服务
- 除了同类型的数据库引擎外,还支持不同类型之间的数据迁移。
- 不仅可以使用 RDBMS,还可以使用 NoSQL 数据库作为迁移源。
与其他迁移工具的区别
除了 AWS DMS 之外,AWS 还提供服务器迁移服务,例如 AWS Server Migration Service (AWS SMS) 和 AWS Application Migration Service (AWS MGN)。
差异的简要总结如下。
- AWS服务器迁移服务(AWS SMS)
主要用例是从本地 VMware 和 Hyper-V 进行大规模迁移。
使用虚拟设备的无代理服务器迁移服务 - AWS应用程序迁移服务(AWS MGN)
支持通过简单的迁移流程迁移到 AWS 的迁移服务。
需要在服务器上安装 AWS MGN 代理
(2021 年 11 月更新部分兼容无代理) - AWS数据库迁移服务(AWS DMS)
提前准备好 RDS 或 Aurora 等托管数据库服务后,使用 AWS DMS 迁移数据的服务。
迁移源和目标数据库需要来自 AWS DMS 的互联网/封闭连接
DMS 中的迁移步骤
在本文中,我们将实际使用 AWS DMS 并介绍将数据从 EC2 迁移到 RDS 的步骤,就像在本地一样。
两个数据库引擎均使用MySQL,EC2端版本为5.7,RDS端版本为8.0。
请注意,不同数据库引擎之间的迁移是通过使用AWS Schema Conversion Tool(SCT)来实现的,但我们这次不会使用它。
有关 SCT 的更多信息,请参阅以下文档。
AWS Schema 转换工具とは – AWS Schema 转换工具
另外,在本文中,我们将通过一个从 MySQL 到 MySQL 的数据迁移示例,让您了解如何使用 AWS DMS。
如果源数据库和目标数据库类型相同,首先考虑使用数据库引擎提供的迁移工具,这是实际数据迁移的有效选择。
使用与 MySQL 兼容的数据库作为 AWS DMS 的源 – AWS Database Migration Service
配置图
下图是当前配置的图像。
假设有一个本地服务器,我们将在AWS上准备EC2(Amazon Linux 2)并设置MySQL 5.7。
同样在目标 RDS 上启动 MySQL 8.0。
通过互联网传输数据,并将数据迁移到目标RDS。
注意,通过互联网连接源数据库时,对于MySQL来说,需要授予数据库访问权限,但本文不会对此进行解释。 请咨询您的 DBA 等,并设置权限。
设置 AWS Database Migration Service (AWS DMS)
设置 AWS Database Migration Service (AWS DMS)。
我们不会解释为 DMS 创建的 VPC 设置,但我们将准备基本的公有子网和私有子网。
详细请参考官方文档。
AWS Database Migration Service 的先决条件 – AWS Database Migration Service
1.创建安全组
提前创建复制实例要设置的安全组。
- 入站规则:无规则创建
- 出站规则:将规则添加到源数据库以从复制实例连接到。
由于这次我使用 MySQL,因此我将 TCP3306 目标设置为 0.0.0.0/0。
2.创建复制实例
当您首次访问 AWS DMS 控制台时,系统将指导您创建复制实例,首先按如下所述配置子网组。
点击右上角“创建子网组”
创建子网组。
- 添加子网: 这次,我们将仅添加公有子网。
如果保留默认值,此子网组似乎会添加 VPC 中的所有子网。
在验证过程中,我没有意识到这一点,无意中在私有子网中创建了一个复制实例,导致 NW 通信不可用…… - 标签:设置成本标签等。
接下来,创建一个复制实例。
配置复制实例。
- 实例类/存储
这次,出于测试目的,实例类为 dms.t3.medium,存储为默认 50GiB。
这种内存和磁盘分配似乎会影响迁移速度。 详细请参考官方文档
(如果内存装不下数据,就会写入磁盘,速度会很慢)
选择复制实例的最佳大小 – AWS Database Migration Service
这些是与网络相关的设置。
- 多可用区:建议在生产中启用此功能。
这次我们将再次启用它,但请注意,费用会更高。 - 公开访问:也已启用
- 复制子网组:选择您之前创建的子网组
- VPC 安全组:选择您之前创建的安全组。
必须允许到源数据库的出站规则
维护和标签设置。
- 维护窗口:采用UTC表示法,请注意时差。 这里,UTC 周六 20:00 = JST 周日 05:00
- 标签:设置成本标签等。
稍等片刻后,复制实例创建完成。
设置 AWS Database Migration Service (AWS DMS)
3.创建端点(源端点)
接下来,创建一个端点。
首先,创建迁移源端点。
- 端点类型:源端点
- 源引擎:MySQL
- 访问端点数据库:手动提供访问信息。
对于服务器名称(在本例中为目标服务器的全局 IP)、端口、用户名和密码,输入迁移源数据库中的值。
如果状态为“成功”,则端点连接测试成功。
单击“创建端点”并稍等片刻即可完成。
如果测试不成功,请检查以下内容:
- 复制实例是在公有子网中创建的吗?
- 复制实例的安全组中是否允许出站规则?
- 您尝试连接的服务器的 FW(在 AWS 中为安全组)是否允许从复制实例进行访问?
4.创建端点(目标端点)
接下来,创建目标端点。
- 端点类型:源端点
- 选择RDS数据库实例:勾选
- 端点标识符、目标引擎:自动选择RDS信息
- 访问端点数据库:手动提供访问信息。
将自动选择服务器名称、端口、用户名、RDS 信息。
输入您在创建 RDS 时指定的密码。
如果状态为“成功”,则端点连接测试成功。
单击“创建端点”并稍等片刻即可完成。
至于目标端点,这次假设它与复制实例在同一个VPC中,所以如果RDS安全组中允许复制实例的私有IP,我认为测试会成功。
5、创建数据库迁移任务
接下来,创建数据库迁移任务。
数据库迁移任务是执行实际数据迁移的设置。
- 复制实例、源数据库端点、目标数据库端点:选择您之前创建的那个
- 迁移类型:迁移现有数据。
请注意,复制连续更改(CDC)时,所需的设置因数据库引擎而异,因此请查看官方文档以了解详细信息。
使用 AWS DMS 创建连续复制任务 – AWS Database Migration Service
继续任务设置。
- 目标建表方式:删除目标上的表。
根据前面提到的迁移类型,该模式的推荐模式有所不同。
创建任务 – AWS Database Migration Service - 启用验证:检查
- 启用 CloudWatch Logs:选中
将其余部分保留为默认值。
表映射设置。 迁移源MySQL中已创建名为“mydb”的数据库。
- 架构名称:mydb
- 表名:%(通配符)
将其余设置保留为默认值。
单击“创建任务”开始数据迁移。
我也是这么想的,但是没有启动,所以我手动启动了。
↓
6.确认
根据迁移的数据,任务将在短暂等待后完成。
您还可以检查每个表加载的行数。
详细日志也记录在 CloudWatch Logs 中。
概括
在本文中,我们实际使用 AWS Database Migration Service (AWS DMS) 介绍了将数据从 EC2 迁移到 RDS 的步骤,就像在本地一样。
这次,源和目标使用相同类型的数据库引擎迁移数据。
过去,我想大多数人都是使用mysqldump在MySQL系统之间迁移数据。
如本文所述,通过使用 AWS DMS,您可以从 AWS 控制台执行数据迁移工作,而无需直接登录目标数据库。
数据迁移设置也很容易执行,因为即使您不是 DBA 也可以配置它们。
不过,你仍然需要提前在AWS端创建VPC、RDS等,并且使用数据库的服务器也需要通过某种方式创建/迁移。
我觉得这是一个可以作为一个部分使用的服务,同时迁移整个系统。