我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
Amazon DMS 从 PostgreSQL 迁移到亚马逊 Aurora PostgreSQL 的同构数据
亚马逊云科技宣布了针对多个亚马逊云科技区域的 Amazon Database Migration Service (Amazon DMS) 同构迁移。通过 Amazon DMS 同构迁移,您可以使用原生数据库工具将数据从源数据库迁移到亚马逊云科技上的等效引擎。
同构数据迁移是无服务器的,这意味着 Amazon DMS 会自动配置迁移所需的资源。通过同构数据迁移,您可以迁移表、表分区、数据类型和辅助对象,例如函数、存储过程、触发器、索引和其他数据库对象。当您使用兼容的源和目标数据提供商创建迁移项目时,Amazon DMS 会连接到源数据提供商,读取源数据,将文件转储到磁盘上,并使用本地数据库工具恢复数据。
在这篇文章中,我们向您展示了完整的同构迁移过程示例,并提供了从 PostgreSQL 迁移到 Amazon Aurora PostgreSQL 兼容版和适用于 PostgreSQL 的亚马逊关系数据库服务(Amazon RDS)的故障排除步骤。
解决方案概述
下图显示了在 Amazon DMS 中使用同构数据迁移将 PostgreSQL 数据库迁移到 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 的过程。Amazon DMS 为您的数据迁移创建无服务器环境。

对于不同类型的数据迁移,Amazon DMS 使用不同的原生 PostgreSQL 数据库工具。
对于采用满负荷迁移类型的同构数据迁移,Amazon DMS pg_dump 使用从您的源数据库读取数据并将其存储在连接到无服务器环境的磁盘上。Amazon DMS 读取您的所有源数据后,它会使用目标数据库 pg_restore 中的数据来恢复您的数据。
对于满载和变更数据捕获 (CDC) 类型的同构数据迁移,Amazon DMS pg_dump 使用 pg_restore 和从源读取元数据并将元数据加载到目标,并使用连接到无服务器环境的磁盘作为转储文件的存储。Amazon DMS 将元数据加载到目标后,它使用发布者和订阅者模型进行初始同步,然后执行复制。在此模型中,一个或多个订阅者订阅发布者节点上的一个或多个出版物。
对于使用 CDC 进行同构数据迁移,Amazon DMS 需要本地起点来开始复制。如果您提供原生起点,Amazon DMS 会捕获该起点之后的变化。或者,在数据迁移设置中选择 "立即",以便在实际数据迁移开始时自动捕获复制的起点。
先决条件
下图说明了同构数据迁移的工作原理和所需的组件。

Amazon DMS 同构迁移使用数据提供商以及从实例配置文件中捕获的网络和安全细节连接到源数据库和目标数据库。在以下各节中,我们将向您展示如何创建这些组件。
创建 RDS for PostgreSQL 实例
对于这个用例,我们使用 PostgreSQL 版本 14。有关创建数据库的说明,请参阅使用 Amazon RDS 创建并连接到 PostgreSQL 数据库。
在这篇文章中,我们使用了 DVD 租赁示例数据库,其中包含以下对象:
- 15 张桌子
- 1 个触发器
- 7 次观看
- 8 个函数
- 1 个域名
- 13 个序列
要设置源数据库,请从命令提示符登录 PostgreSQL 并使用以下示例语法进行连接:
psql "host=postgres.xxxx11hxxxxx.us-east-1.rds.amazonaws.com port=5432 dbname= dvdrental user= USERNAME password= PASSWORD"
以下代码显示了我们的数据库详细信息的示例:
配置源数据库权限
源数据库和目标数据库需要更改配置才能处理 CDC。
在源数据库上,为您在 Amazon DMS 中为 PostgreSQL 源数据库指定的数据库用户授予超级用户权限。数据库用户需要超级用户权限才能访问源中特定于复制的功能。要进行满负荷数据迁移,您的数据库用户需要对表进行 SELECT 权限才能迁移它们。参见以下语法:
对于适用于 PostgreSQL 的 Amazon RDS 作为来源
使用 PostgreSQL 数据库实例的亚马逊云科技主用户账户作为 PostgreSQL 源数据提供商的用户账户,用于在 Amazon DMS 中进行同构数据迁移。主用户账户具有允许其设置 CDC 所需的角色。如果您使用主用户账户以外的账户,则该账户必须具有 rds_superuser 角色和 rds_replication 角色。该 rds_replication 角色授予使用逻辑插槽管理逻辑插槽和流式传输数据的权限。参见以下语法:
自建的 PostgreSQL 数据库作为源
如果你使用自管理的 PostgreSQL 数据库作为源,请在映射到数据库的参数组级别修改以下设置:
- wal_level — 设置为
logical。 - max_replication_slots — 设置为大于 1 的值。
- max_replication_slots — 设置为大于 1 的值。
- max_wal_senders — 设置为大于 1 的值。
- max_wal_senders — 设置为大于 1 的值。
- wal_sender_timeout — 将值设置为 0。此参数结束处于非活动状态的时间超过指定毫秒数的复制连接。默认值为 60,000 毫秒(60 秒)。将该值设置为 0 会禁用超时机制。
更新前面的参数后,重新启动 PostgreSQL 源数据库。
在本用例中,我们使用 Amazon Aurora PostgreSQL 版本 15。
创建 IAM 策略和角色
您还需要一个 Amazon Identity and Access Management (IAM) 策略和角色权限。
配置目标数据库权限
Amazon DMS 需要一定的权限才能将数据迁移到您的目标 RDS for PostgreSQL 或 Aurora PostgreSQL 数据库。
以下脚本在 PostgreSQL 目标数据库中创建具有所需权限的数据库用户:
由于 Amazon DMS 使用订阅者和发布者方法进行这种同构迁移,因此您需要将数据库 rds.logical_replication 参数组中的参数设置为 1,然后重启数据库。需要重新启动才能确保反映更新的参数组更改。
您可以将源数据库和目标数据库凭证存储在 Amazon Secrets Manager 中。更多详情,请参阅将硬编码的数据库凭证移至 Amazon Secrets Manager。
接下来,创建数据提供者、子网组和实例配置文件。
创建数据提供者
创建数据提供者的过程与 Amazon DMS 中的源数据库终端节点类似。
创建源提供商
您可以使用 PostgreSQL 数据库作为 Amazon DMS 中同构数据迁移的来源。在这种情况下,您的源数据提供者可以位于本地,托管在亚马逊弹性计算云(亚马逊 EC2)上,也可以托管在 RDS for PostgreSQL 数据库上。在撰写本文时,不支持将亚马逊 Aurora PostgreSQL 作为源代码提供商。
为您的迁移项目提供一个唯一可识别的源提供商名称,并指定引擎类型、服务器名称、端口、数据库名称和 SSL 模式。
创建目标提供商
添加可唯一识别迁移项目的目标提供商名称,并指定引擎类型、服务器名称、端口、数据库名称和 SSL 模式。

创建实例配置文件
Amazon DMS 为同构数据迁移创建了无服务器环境。创建实例配置文件时,您需要指定要使用的 VPC。您可以为账户和区域使用默认 VPC,也可以创建新的 VPC。对于每次数据迁移,Amazon DMS 都会与您用于实例配置文件的 VPC 建立 VPC 对等连接。然后,Amazon DMS 在与您的实例配置文件关联的安全组中添加 CIDR 区块。由于 Amazon DMS 将公有 IP 地址附加到您的实例配置文件中,因此使用相同实例配置文件的所有数据迁移都具有相同的公有 IP 地址。当您的数据迁移停止或失败时,Amazon DMS 会删除 VPC 对等连接。

创建迁移项目
现在,您可以使用在之前的步骤中创建的资源来创建迁移项目。
在 Amazon DMS 控制台上,创建新的数据迁移任务。

以下屏幕截图显示了我们创建的迁移项目。

创建并运行数据迁移任务
在 Amazon DMS 控制台上,创建新的数据迁移任务。


停止模式有两个选项:
- 不要停止 CDC — 满负荷完成后,CDC 将立即启动,任务将处于运行状态。此选项用于持续数据复制。
- 使用服务器时间点 — 满负荷完成后,您可以在 UTC 中提及源服务器中的 CDC 停止点。这允许您在指定的时间停止迁移任务。
迁移任务完成后,启动任务。


验证迁移
数据迁移完成后,您可以在目标端看到对象。登录到你的目标 PostgreSQL 数据库并运行 \dt 命令来列出关系并 \di 列出索引:
psql "host=postgres.xxxx11hxxxxx.us-east-1.rds.amazonaws.com port=5432 dbname= dvdrental user= USERNAME password= PASSWORD"


测试 CDC 场景
迁移开始后,将在源数据库中创建发布槽。
您可以通过运行以下查询来查看发布槽下的表:


注意:pubname 应该是出版物 ID

为了在源上测试 CDC 场景,我们在 dvdrental 数据库的样本表中插入和更新数据。


在目标数据库端,订阅者以 ID 21838 开始,如以下屏幕截图所示。


可以在目标系统上查看以下更新。

如果在迁移期间出现任何问题或进行验证,请参阅源数据库和目标数据库日志。
以下屏幕截图显示了源数据库日志的示例。

以下目标数据库日志显示了与 max_logical_replication_workers 相关的警告。增加 max_logical_replication_workers 参数可缩短总体迁移时间。

局限性
此解决方案有以下限制:
- 连接到源的用户名有以下要求:
- 长度必须为 2—64 个字符。
- 不能有空格。
- 可以包含以下字符:a—z、A—Z、0—9、下划线 (_)。
- 必须以 a—z 或 A—Z 开头。
- 连接到源的密码有以下要求:
- 长度必须为 1—128 个字符。
- 不能包含以下任何内容:单引号 (')、双引号 (")、分号 (;) 或空格。
- 同构数据迁移不支持选择规则。此外,你不能使用转换规则来更改列的数据类型、将对象从一个架构移动到另一个架构或更改对象的名称。
- 同构数据迁移不提供内置的数据验证工具。
- 在 PostgreSQL 中使用同构数据迁移时,Amazon DMS 会将视图作为表迁移到您的目标数据库。
- 同构数据迁移无法捕获持续数据复制期间架构级别的更改。如果您在源数据库中创建新表,则 Amazon DMS 无法迁移此表。要迁移此新表,请重新启动数据迁移。
- 您不能在 Amazon DMS 中使用同构数据迁移将数据从较高的数据库版本迁移到较低的数据库版本。
- 您不能在亚马逊云科技命令行接口 (亚马逊云科技 CLI) 或 API 中使用同构数据迁移。
- 同构数据迁移不支持与 VPC 二级 CIDR 范围内的数据库实例建立连接。
- 您不能使用 8081 端口从数据提供商进行同构迁移。
对同构数据库迁移进行故障排除
如果您遇到导致数据迁移任务失败的连接问题,请检查以下内容:
- 确保源实例和目标实例安全组包含数据 IP/端口的任何入站或出站流量的规则。此外,还要验证 NACL 和路由表规则。
- 本地和亚马逊 EC2 数据库应可通过创建的 VPC 进行访问。如果不是,请在您的安全组中添加以下内容,以允许在防火墙中显示输入连接列表:
- 添加本地实例的公有 IP。
- 添加亚马逊云科技管理的数据库的公有 IP。
- 添加数据迁移任务的弹性 IP 地址(任务创建后,会生成弹性 IP)。
- 对于 CDC 连接,源数据库和目标数据库都应该能够相互通信。
- 确保将 Amazon DMS 同构实例弹性 IP 地址添加到源和目标数据库安全组(数据库端口)中。
您还可能由于缺少先决条件而遇到任务失败。错误消息可能与以下内容类似。

在这种情况下,应在源数据库和目标数据库上启用逻辑复制。
日志文件
您可以在迁移项目的详细信息页面上查看数据库迁移进度和日志,如以下屏幕截图所示。

以下是来自我们迁移项目的亚马逊 CloudWatch 日志示例:
清理干净
Amazon DMS 同构迁移创建的亚马逊云科技资源只要在使用中就会产生成本。当您不再需要资源时,通过删除迁移项目下的关联数据迁移以及迁移项目来清理它们。
结论
这篇文章讨论了使用 Amazon DMS 同构迁移和 PostgreSQL 数据库引擎配置和迁移数据的端到端流程。最新的 Amazon DMS 同构迁移功能可以轻松而轻松地从 PostgreSQL 迁移到 Amazon Aurora PostgreSQL 和 Amazon RDS for PostgreSQL。
在评论部分留下你的想法、问题和评论。
作者简介
Nagarjuna Paladugula 是亚马逊云科技 Professional Services 的高级云支持工程师,专门研究 Oracle、Amazon RDS for Oracle 和 Amazon DMS。他在不同的数据库技术方面拥有超过 19 年的经验,并利用自己的经验为客户提供指导和技术支持,帮助他们将数据库迁移到亚马逊云科技云。工作之余,纳加朱纳喜欢旅行、看电影和网络连续剧以及跑步。
Bhavani Akundi 是亚马逊云科技专业服务的高级首席数据库顾问。她帮助亚马逊云科技客户将其数据库和应用程序迁移到亚马逊云科技并对其进行现代化改造。
InduteJa Aligeti 是亚马逊云科技的高级首席数据库顾问。她在微软技术领域拥有超过 18 年的经验,专攻 SQL Server。她专注于帮助客户构建高度可用、经济实惠的数据库解决方案,并将其大规模 SQL Server 数据库迁移到亚马逊云科技。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。