Amazon Aurora
Aurora 用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Aurora 的 PostgreSQL 逻辑复制

PostgreSQL 逻辑复制对复制和同步数据库的各个部分提供精细控制。例如,您可以使用逻辑复制来复制数据库的各个表。

接下来,您将了解有关如何使用 PostgreSQL 逻辑复制和 Amazon Aurora 的信息。有关 PostgreSQL 实现逻辑复制的更多详细信息,请参阅 PostgreSQL 文档中的逻辑复制逻辑解码概念

注意

逻辑复制随 Aurora PostgreSQL 版本 2.2.0(兼容 PostgreSQL 10.6)及更高版本提供。

接下来,您将了解有关如何使用 PostgreSQL 逻辑复制和 Amazon Aurora 的信息。

配置逻辑复制

要使用逻辑复制,需要先为集群参数组设置 rds.logical_replication 参数。然后设置发布者和订阅者数据。

逻辑复制使用发布和订阅模型。发布者订阅者是节点。发布在发布者上定义,是一组从一个或多个数据库表生成的更改。订阅定义另一个数据库及其所订阅的一个或多个发布的连接。订阅在订阅者上定义。发布和订阅在发布者数据库和订阅者数据库之间建立连接。

注意

要为 PostgreSQL 数据库执行逻辑复制,您的 AWS 用户账户需要有 rds_superuser 角色。

启用 Aurora 的 PostgreSQL 逻辑复制

  1. 创建用于逻辑复制的新数据库集群参数组,如 创建数据库集群参数组 中所述。使用以下设置:

    • 对于Parameter group family (参数组系列),选择 aurora-postgres10 或更高版本。

    • 对于类型,请选择数据库集群参数组

  2. 修改集群参数组,如 修改数据库集群参数组中的参数 中所述。将 rds.logical_replication 静态参数设置为 1。

    启用 rds.logical_replication 参数会影响数据库集群的性能。

配置逻辑复制的发布者

  1. 设置发布者的集群参数组:

    • 要使用发布者的现有 Aurora PostgreSQL 数据库集群,引擎版本必须是 10.6 或更高版本。执行以下操作:

      1. 修改集群参数组,将其设置为您在启用逻辑复制时创建的组。有关修改 Aurora PostgreSQL 数据库集群的详细信息,请参阅 修改 Amazon Aurora 数据库集群

      2. 重启数据库集群,让静态参数的更改生效。集群参数组包含对静态参数 rds.logical_replication 的更改。

    • 要使用发布者的新 Aurora PostgreSQL 数据库集群,请使用以下设置创建数据库集群。有关创建 Aurora PostgreSQL 数据库集群的详细信息,请参阅 创建数据库集群

      1. 选择 Amazon Aurora 引擎,然后选择 PostgreSQL-compatible (PostgreSQL 兼容)版。

      2. 对于 DB engine version (数据库引擎版本),选择一个与 PostgreSQL 10.6 或更高版本兼容的 Aurora PostgreSQL 引擎。

      3. 对于 DB cluster parameter group (数据库集群参数组),选择您在启用逻辑复制时创建的组。

  2. 修改发布者的安全组的入站规则,以允许订阅者连接。通常的方法是在安全组中包含订阅者的 IP 地址。有关修改安全组的详细信息,请参阅 Amazon Virtual Private Cloud 用户指南中的您的 VPC 的安全组

数据库表的逻辑复制示例

要实现逻辑复制,请使用 PostgreSQL 命令 CREATE PUBLICATIONCREATE SUBSCRIPTION

对于此示例,表数据从作为发布者的 Aurora PostgreSQL 数据库复制到作为订阅者的 PostgreSQL 数据库的 RDS。设置逻辑复制机制后,对发布者的更改在发生时将继续发送到订阅者。

要为此示例设置逻辑复制,请执行以下操作:

  1. 将 Aurora PostgreSQL 数据库集群设置为发布者。要执行此操作,创建一个新 Aurora PostgreSQL 数据库集群,如在 配置逻辑复制 中配置发布者时所述。

  2. 设置发布者数据库。在发布者数据库中使用以下 SQL 语句创建表。

    CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
  3. 使用以下 SQL 语句将数据插入到发布者数据库。

    INSERT INTO LogicalReplicationTest VALUES (generate_series(1,10000));
  4. 使用以下 SQL 语句在发布者上创建发布。

    CREATE PUBLICATION testpub FOR TABLE LogicalReplicationTest;
  5. 创建要作为您的订阅者的数据库。

    对于此示例,为 PostgreSQL 数据库创建 Amazon RDS。请确保使用 PostgreSQL 数据库引擎版本 10.4 或更高版本,其支持逻辑复制。有关创建 RDS PostgreSQL 数据库实例的详细信息,请参阅 Amazon RDS 用户指南 中的创建运行 PostgreSQL 数据库引擎的数据库实例

  6. 设置订阅者数据库。对于此示例,使用以下 SQL 语句创建与为发布者创建的表相似的表。

    CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
  7. 在两个数据库中使用以下 SQL 语句验证发布者的表中有数据,但订阅者上还没有数据。

    SELECT count(*) FROM LogicalReplicationTest;
  8. 在订阅者上创建订阅。在订阅者数据中使用以下 SQL 语句,为发布者集群中的信息使用以下设置:

    • host – 发布者集群的写入器数据库实例。

    • port – 写入器数据库实例正在侦听的端口。PostgreSQL 的默认值为 5432。

    • dbname – 发布者集群的数据库名称。

    CREATE SUBSCRIPTION testsub CONNECTION 'host=publisher-cluster-writer-endpoint port=5432 dbname=db-name user=user password=password' PUBLICATION testpub;

    创建订阅后,将在发布者上创建逻辑复制槽。

  9. 要验证此示例中的初始数据是否在订阅者上复制,请在订阅者数据库中使用以下 SQL 语句。

    SELECT count(*) FROM LogicalReplicationTest;

在发布者上进行的任何其他更改都会被复制到订阅者。

使用 AWS Database Migration Service 的逻辑复制

您可以使用 AWS Database Migration Service (AWS DMS) 复制数据库或数据库的一部分。使用 AWS DMS 将数据从 Aurora PostgreSQL 数据库迁移到另一个开源或商用数据库。有关 AWS DMS 的更多信息,请参阅 AWS Database Migration Service 用户指南

以下示例演示如何从作为发布者的 Aurora PostgreSQL 数据库设置逻辑复制,然后使用 AWS DMS 进行迁移。在此示例中,您将数据从数据库表迁移到作为订阅者的 RDS PostgreSQL 数据库。此示例使用在 数据库表的逻辑复制示例 中创建的相同发布者和订阅者。

要设置 AWS DMS 的逻辑复制,您需要有您在 Amazon RDS 中的发布者和订阅者的详细信息。特别是,您需要有发布者的写入器数据库实例和订阅者的数据库实例的详细信息。

请获取发布者的写入器数据库实例的以下信息:

  • Virtual Private Cloud (VPC) 标识符

  • 子网组

  • 可用区 (AZ)

  • VPC 安全组

  • 数据库实例 ID

请获取发布者的数据库实例的以下信息:

  • 数据库实例 ID

  • 源引擎

使用 AWS DMS 进行 Aurora PostgreSQL 的逻辑复制

  1. 准备发布者数据库来与 AWS DMS 一起工作。

    要实现此目的,PostgreSQL 10.x 及更高版本的数据库需要您对发布者数据库应用 AWS DMS 封装函数。有关此步骤以及后续步骤的详细信息,请参阅 AWS Database Migration Service 用户指南将 PostgreSQL 版本 10.x 及更高版本用作 AWS DMS 的源中的说明。

  2. 登录到 AWS 管理控制台,然后通过以下网址打开 AWS DMS 控制台:https://console.aws.amazon.com/dms。在右上方,选择发布者和订阅者所位于的相同 AWS 区域。

  3. 创建 AWS DMS 复制实例。

    选择与发布者的写入器数据库实例的值相同的值。包括以下设置:

    • 对于 VPC,选择与写入器数据库实例相同的 VPC。

    • 对于 Replication Subnet Group (复制子网组),选择与写入器数据库实例相同的子网组。

    • 对于 Availability zone (可用区),选择与写入器数据库实例相同的区域。

    • 对于 VPC Security Group (VPC 安全组),选择与写入器数据库实例相同的组。

  4. 为源创建 AWS DMS 终端节点。使用以下设置将发布者指定为源终端节点:

    • 对于 Endpoint type (终端节点类型),选择 Source endpoint (源终端节点)

    • 选择 Select RDS DB Instance (选择 RDS 数据库实例)

    • 对于 RDS Instance (RDS 实例),选择发布者的写入器数据库实例的数据库标识符。

    • 对于 Source engine (源引擎),选择 postgres

  5. 为目标创建 AWS DMS 终端节点。使用以下设置将订阅者指定为目标终端节点:

    • 对于 Endpoint type (终端节点类型),选择 Target endpoint (目标终端节点)

    • 选择 Select RDS DB Instance (选择 RDS 数据库实例)

    • 对于 RDS Instance (RDS 实例),选择订阅者数据库实例的数据库标识符。

    • Source engine (源引擎) 选择值。例如,如果订阅者是 RDS PostgreSQL 数据库,则选择 postgres

  6. 创建 AWS DMS 数据库迁移任务。

    您使用数据库迁移任务指定要迁移的数据库表,使用目标架构映射数据并在目标数据库上创建新表。至少为 Task configuration (任务配置) 使用以下设置:

    • 对于 Replication instance (复制实例),选择您在之前的步骤中创建的复制实例。

    • 对于 Source database endpoint (源数据库终端节点),选择您在之前的步骤中创建的发布者源。

    • 对于 Target database endpoint (目标数据库终端节点),选择您在之前的步骤中创建的订阅者目标。

    其余任务详细信息取决于您的迁移项目。有关为 DMS 任务指定所有详细信息的更多信息,请参阅 AWS Database Migration Service 用户指南 中的使用 AWS DMS 任务

任务创建后,AWS DMS 开始将数据从发布者迁移到订阅者。