使用快速启动迁移功能迁移到 AlloyDB for PostgreSQL


本页面介绍了如何执行快速启动持续迁移,以将同构 PostgreSQL 迁移到 AlloyDB for PostgreSQL。

概览

快速启动迁移是适用于同构 PostgreSQL 场景的轻量级持续迁移流程。通过快速启动迁移,Database Migration Service 可以自动配置您所需的核心网络和迁移资源:网络连接、子网、具有 Private Service Connect 接口的专用连接配置、连接配置文件和持续迁移作业。

借助快速启动迁移,您可以将数据迁移到现有 AlloyDB for PostgreSQL 集群,也可以在配置迁移时创建新集群。快速启动迁移最适合以下情况:

  • 不需要自定义数据转储并行设置的基本迁移。
  • 将数据库从一个 Google Cloud 项目迁移到另一个项目。 配置快速启动迁移时,您可以在与来源不同的项目中创建目标集群,并设置 Database Migration Service 在另一个项目的虚拟私有云 (VPC) 网络中创建网络连接和子网。
  • 从在 Google Cloud虚拟私有云 (VPC) 网络中具有专用 IP 地址的来源(例如 Compute Engine 上的自管理数据库或启用了专用网络的 Cloud SQL for PostgreSQL 实例)进行迁移。

    托管在 Google Cloud 外部的来源可能需要额外的网络组件(例如 Cloud VPN 连接),以便可以通过 VPC 网络中的专用 IP 地址访问这些来源。

  • 快速启动迁移支持公共 IP 和 Private Service Connect 接口连接。快速启动迁移不支持反向 SSH 隧道。

如需详细了解快速启动迁移,请参阅 Database Migration Service 主文档中的 快速启动迁移概览。

准备工作

  1. 验证快速启动迁移是否能完全支持您的场景。请参阅 快速启动迁移限制。
  2. 在 Google Cloud 控制台的项目选择器页面上,选择或 创建 Google Cloud 项目。

    转到“项目选择器”

  3. 启用 Database Migration Service、Compute Engine、Network Connectivity Center 和 AlloyDB for PostgreSQL API。

    启用 API

所需的角色

如需获得使用 Database Migration Service 运行到 AlloyDB for PostgreSQL 的快速入门迁移所需的权限,请让管理员在相关项目中为参与迁移的账号授予所需的 Identity and Access Management (IAM) 角色。如需详细了解如何授予角色,请参阅 IAM 文档中的 管理访问权限。

源项目中的角色和权限

如果您使用专用 IP 连接性来连接到Google Cloud 项目中的源数据库,请向源数据库所在项目中的特定账号授予以下角色:

  • 对于执行迁移的用户账号:
  • 对于目标项目的 Database Migration Service 服务账号: Compute Network Viewer (roles/compute.networkViewer)

    启用 Database Migration Service API 时,系统会创建 Database Migration Service 服务账号。与此账号关联的电子邮件地址是自动生成的,无法更改。此电子邮件地址采用以下格式:

    service-DESTINATION_PROJECT_NUMBER@gcp-sa-datamigration.

这些预定义角色包含在源数据库项目中设置连接所需的权限,这是使用 Database Migration Service 进行快速入门迁移的一部分。如需查看所需的确切权限,请展开所需权限(来源)部分:

所需权限(来源)

如需使用 Database Migration Service 执行同构快速入门迁移,您需要拥有以下权限:

对于执行迁移的用户账号:

  • compute.networks.get
  • compute.networks.list
  • compute.networks.updatePolicy
  • compute.subnetworks.get
  • compute.subnetworks.list
  • compute.subnetworks.create
  • compute.subnetworks.use
  • compute.networkAttachments.create
  • compute.networkAttachments.get
  • compute.networkAttachments.list
  • compute.networkAttachments.update
  • compute.networkAttachments.use
  • compute.regionOperations.get
  • networkconnectivity.internalRanges.create
  • networkconnectivity.internalRanges.get
  • networkconnectivity.operations.get
  • resourcemanager.projects.getIamPolicy

对于目标项目的 Database Migration Service 服务账号:

  • compute.networkAttachments.get

目标项目中的角色和权限

在 Google Cloud 目标数据库所在的项目中,向执行迁移的用户账号授予以下角色:

此外,目标项目的 Database Migration Service 服务账号 (service-DESTINATION_PROJECT_NUMBER@gcp-sa-datamigration.) 需要目标项目的 Database Migration Service Agent (roles/datamigration.serviceAgent) 角色。 Google Cloud 会在您启用 Database Migration Service API 时自动授予此角色。

这些预定义角色包含在目标数据库项目中设置所需迁移组件所需的权限,这些组件是使用 Database Migration Service 进行快速启动迁移的一部分。如需查看所需的确切权限,请展开所需权限(目标)部分:

所需权限(目标位置)

如需使用 Database Migration Service 执行同构快速入门迁移,您需要拥有以下权限:

对于执行迁移的用户账号:

  • datamigration.privateconnections.get
  • datamigration.privateconnections.list
  • datamigration.privateconnections.create
  • datamigration.migrationjobs.create
  • datamigration.migrationjobs.update
  • datamigration.migrationjobs.verify
  • datamigration.migrationjobs.start
  • datamigration.migrationjobs.get
  • datamigration.migrationjobs.fetchSourceObjects
  • datamigration.operations.get
  • datamigration.connectionprofiles.create
  • datamigration.connectionprofiles.get
  • datamigration.connectionprofiles.update
  • datamigration.locations.list
  • datamigration.locations.fetchStaticIps
  • alloydb.clusters.create
  • alloydb.clusters.get
  • alloydb.clusters.list
  • alloydb.clusters.update
  • alloydb.clusters.delete
  • alloydb.instances.create
  • alloydb.instances.get
  • alloydb.instances.list
  • alloydb.instances.update
  • alloydb.instances.delete
  • alloydb.operations.get
  • alloydb.users.list
  • alloydb.users.get
  • alloydb.users.create
  • alloydb.users.update
  • alloydb.users.delete
  • resourcemanager.projects.getIamPolicy

对于目标项目的 Database Migration Service 服务账号:

  • alloydb.clusters.import
  • alloydb.instances.connect
  • alloydb.instances.executeSql

配置源数据库

如需配置 PostgreSQL 源数据库,请执行以下操作:

  1. 在实例中创建专用的迁移用户账号。
    • 对于 Cloud SQL for PostgreSQL 来源,请参阅 Cloud SQL 文档中的 创建用户。
    • 对于其他来源,请参阅数据库提供商文档或 PostgreSQL 文档中的 创建和管理用户。
  2. 为专用迁移用户账号分配必要的权限。 针对要迁移的每个数据库运行以下命令:
    -- Grant the REPLICATION attribute
    ALTER ROLE MIGRATION_USER REPLICATION;
    
    -- Grant database-level permissions.
    -- Repeat for each database you want to migrate.
    GRANT CONNECT, CREATE ON DATABASE DATABASE_NAME TO MIGRATION_USER;
    
    -- Grant schema-level usage.
    -- Repeat for each schema in each database you want to migrate.
    GRANT USAGE ON SCHEMA SCHEMA_NAME TO MIGRATION_USER;

    替换以下内容:

    • 将 MIGRATION_USER 替换为迁移用户账号的名称。
    • 将 DATABASE_NAME 替换为您要迁移的数据库的名称。
    • 将 SCHEMA_NAME 替换为要迁移的数据库中的架构名称。
  3. 迁移用户账号需要对您迁移的表具有所有权访问权限。如需授予此级别的访问权限,请执行以下操作之一:
    • 仅适用于 Cloud SQL for PostgreSQL 以外的来源:将 SUPERUSER PostgreSQL 角色分配给迁移账号。
    • 对于所有来源:将迁移用户账号添加到拥有这些表的用户组。 运行以下命令:
      -- Grant table ownership.
      GRANT TABLE_OWNER_GROUP_NAME TO MIGRATION_USER;

      替换以下内容:

      • TABLE_OWNER_GROUP_NAME 替换为拥有您要迁移的每个表的用户群组的名称。
      • 将 MIGRATION_USER 替换为迁移用户账号的名称。
  4. 对于没有主键的表:在变更数据捕获 (CDC) 阶段,Database Migration Service 不会为没有主键的表复制 UPDATE 或 DELETE 操作。如果您想在复制中包含此类操作,请使用 REPLICA IDENTITY 修改没有主键的表:
    ALTER TABLE TABLE_NAME REPLICA IDENTITY FULL;
    ALTER TABLE TABLE_NAME REPLICA IDENTITY USING INDEX INDEX_NAME;

    替换以下内容:

    • TABLE_NAME 是没有主键的表的名称。
    • INDEX_NAME 是唯一索引,可以跟踪没有主键的表中的行。
  5. 使用数据库标志配置复制设置。

    自管式来源

    保存对数据库标志的更改需要完全重启数据库。 以下示例使用 SQL 查询来更改标志值。 如果您无法直接运行 SQL 查询,请参阅提供商文档,了解有关更改这些标志的步骤。

    1. 将 wal_level 参数设置为 logical。运行以下命令:
      ALTER SYSTEM SET wal_level = 'logical';
    2. 将 wal_sender_timeout 参数设置为 0。 此值可停用用于终止非活跃复制连接的超时机制。运行以下命令:
      ALTER SYSTEM SET wal_sender_timeout = 0;
    3. 使用 max_replication_slots 参数配置复制槽数上限。此参数必须至少设置为每个迁移作业要迁移的数据库数量,并预留一部分进行表同步。

      例如,如果您要迁移 5 个数据库,并且为源实例创建了 2 个迁移作业,那么除了您已经使用的复制槽数量之外,复制槽的数量必须至少为 5 * 2 = 10。

      如需设置此参数,请运行以下命令:

      ALTER SYSTEM SET max_replication_slots = NUMBER_OF_SLOTS;
      其中 NUMBER_OF_SLOTS 表示复制槽数上限。
    4. 将 max_wal_senders 参数配置为至少与 max_replication_slots 相同的值,再加上实例中已使用的发送方数量。

      例如,如果 max_replication_slots 参数设置为 10,并且您已经使用 2 个发送器,则同时运行的 WAL 发送器进程的数量将为 10 + 2 = 12。

      如需设置此参数,请运行以下命令:

      ALTER SYSTEM SET max_wal_senders = NUMBER_OF_SENDERS;
      其中 NUMBER_OF_SENDERS 表示同时运行的 WAL 发送器进程数。
    5. 将 max_worker_processes 设置为至少是您要迁移的数据库数量加上实例中已使用的 max_worker_processes 数量。 如需设置此参数,请运行以下命令:
      ALTER SYSTEM SET max_worker_processes = NUMBER_OF_PROCESSES;
      其中 NUMBER_OF_PROCESSES 表示将迁移的数据库数量。

    Cloud SQL for PostgreSQL 来源

    对于 Cloud SQL 源,您可以在 Google Cloud 控制台中配置数据库标志。 修改数据库标志后,您必须重启实例,设置才能生效。如需详细了解如何在 Cloud SQL 中设置数据库标志,请参阅 Cloud SQL 文档中的 配置数据库标志。

    1. 将 cloudsql.logical_decoding 标志设置为 on。 启用此标志需要重启实例,设置才能生效。
    2. 将 wal_sender_timeout 参数设置为 0。 此值可停用用于终止非活跃复制连接的超时机制。
    3. 使用 max_replication_slots 参数配置复制槽数上限。此参数必须至少设置为您在每个迁移作业中迁移的数据库数量,并预留一部分进行表同步。

      例如,如果您要迁移 5 个数据库,并且为源实例创建了 2 个迁移作业,那么除了您已经使用的复制槽数量之外,复制槽的数量必须至少为 5 * 2 = 10。

    4. 将 max_wal_senders 参数配置为至少与 max_replication_slots 相同的值,再加上实例中已使用的发送方数量。

      例如,如果 max_replication_slots 参数设置为 10,并且您已经使用 2 个发送器,则同时运行的 WAL 发送器进程的数量将为 10 + 2 = 12。

    5. 将 max_worker_processes 参数设置为至少是您要迁移的数据库数量加上实例中已使用的 max_worker_processes 数量。

创建并运行快速启动迁移

如需创建并运行快速启动迁移,您可以使用 Google Cloud 控制台或 gcloud CLI。

控制台

  1. 在 Google Cloud 控制台中,前往开始使用页面。

    前往“开始使用”

  2. 在源引擎菜单中,选择 PostgreSQL。
  3. 在目标引擎菜单中,选择 AlloyDB for PostgreSQL。

    系统会显示全新推出 PostgreSQL 快速迁移功能部分。

  4. 在全新推出 PostgreSQL 快速迁移功能部分,点击开始迁移。

    系统会打开迁移到 AlloyDB for PostgreSQL 页面。

  5. 在配置迁移部分中,执行以下操作:
    1. 从目标区域菜单中,选择目标 AlloyDB for PostgreSQL 集群的区域。
    2. 在迁移前缀框中,输入一个易于理解的字符串,该字符串将添加到为快速启动迁移创建的所有迁移实体的名称中:连接配置文件、专用连接配置、网络连接及其子网,以及迁移作业。
    3. 从连接类型菜单中,选择 Database Migration Service 连接到源数据库的方式:
      • 专用 IP:使用 Private Service Connect 接口通过专用网络进行连接。从配置类型菜单中,选择以下选项之一:
        • 现有连接配置:如果您已有网络连接和使用 Private Service Connect 接口方法的专用连接配置,请选择此选项。如果您之前使用过快速启动迁移,并且想要重复使用相同的网络资源,则此选项最适合。
        • 新连接配置:选择此选项可在源数据库 VPC 网络中创建新的网络连接和网络连接子网。 专用连接配置将在目标集群所在的项目中创建。
      • 公共 IP:使用专用出站静态公共 IP 地址通过公共互联网进行连接。如果目标项目和区域中已存在公共 IP 连接配置,Database Migration Service 会重复使用该配置。否则,当您继续操作时,Database Migration Service 会创建新的公共 IP 连接配置并生成传出 IP 地址。
    4. 点击继续。如果系统提示您确认创建网络资源,请点击配置并继续。
  6. 在连接来源部分中,执行以下操作:
    1. 如果您在上一步中选择了公共 IP,请复制 Google Cloud 控制台中显示的传出 IP 地址,并将其作为入站防火墙规则或 IP 许可清单条目添加到源网络(例如 pg_hba.conf 或云服务商安全群组)中,以允许 Database Migration Service 进行连接。
    2. 输入源数据库的主机名或 IP 地址。 如果您选择了专用 IP,请输入可从来源 VPC 网络访问的专用 IP 地址。如果您选择了公共 IP,请输入源数据库的公共 IP 地址。
    3. 输入用于访问主机的端口。默认 PostgreSQL 端口为 5432。
    4. 输入源数据库中专用迁移账号的用户名和密码。
    5. 从加密类型菜单中,选择以下选项之一:
      • 无:如果您的源数据库不需要 SSL/TLS 加密连接。
      • 必需:如果您的源数据库需要 SSL/TLS 加密连接。此选项不需要任何证书验证。
    6. 在要迁移的数据库菜单中,点击自定义。 使用带有嵌入式数据库发现功能的侧边栏,仅选择要迁移到 AlloyDB for PostgreSQL 的数据库。
    7. 点击继续。
  7. 在配置目标部分中,您可以创建新的目标集群,也可以选择现有目标集群:

    新集群

    如果您想创建新的目标集群,请执行以下操作:

    1. 从目标实例类型菜单中,选择新集群。

      Database Migration Service 会为新集群使用默认的 AlloyDB for PostgreSQL 配置。点击自定义以调整集群功能,例如机器类型、可用区可用性或数据保护设置。如需详细了解集群配置,请参阅 AlloyDB for PostgreSQL 文档中的 创建集群及其主实例。

    2. 在密码字段中,输入默认 postgres 管理员用户的密码。Database Migration Service 会以此用户身份进行连接,以迁移您的数据。

    现有集群

    您可以将数据库迁移到已存在的集群。 确保目标集群已启用 Private Service Connect,处于 RUNNABLE 状态,并且不强制要求使用 AlloyDB 连接器进行 mTLS。请执行以下操作:

    1. 从目标实例类型菜单中,选择现有集群。
    2. 从现有集群 ID 菜单中,选择集群标识符。
  8. 点击开始迁移。

    Database Migration Service 会创建持续迁移作业并开始复制数据。您可以在 AlloyDB for PostgreSQL 中监控迁移进度和目标集群运行状况。如需了解详情,请参阅 AlloyDB for PostgreSQL 文档中的 查看集群和实例详细信息。

gcloud

如需使用 gcloud CLI 创建并运行快速入门迁移,请执行以下操作:

  1. 配置与源数据库的连接。
    根据源数据库使用的是专用 IP (Private Service Connect) 还是公共 IP,选择相应的标签页:

    专用 IP (Private Service Connect)

    如需使用 Private Service Connect 进行连接,请配置网络连接和专用连接:

    1. 配置网络连接:决定是要创建新的网络连接,还是重复使用现有网络连接。 您需要在可访问源数据库专用 IP 的网络中建立网络连接。

      • 如果您想创建新的网络连接,请运行以下命令(点击可展开完整详情)。

        gcloud compute network-attachments create

        在使用下面的命令数据之前,请先进行以下替换:

        • 将 NETWORK_ATTACHMENT 替换为要创建的网络连接的名称。
        • 将 REGION 替换为网络连接所在的区域。
        • 将 DEST_PROJECT_ID 替换为目标项目的项目 ID。
        • 将 SOURCE_PROJECT_ID 替换为源网络所在的项目 ID。

        执行以下命令:

        Linux、macOS 或 Cloud Shell

        gcloud compute network-attachments create NETWORK_ATTACHMENT \
          --region=REGION \
          --connection-preference=ACCEPT_MANUAL \
          --producer-accept-list=DEST_PROJECT_ID \
          --subnets=default \
          --project=SOURCE_PROJECT_ID

        Windows (PowerShell)

        gcloud compute network-attachments create NETWORK_ATTACHMENT `
          --region=REGION `
          --connection-preference=ACCEPT_MANUAL `
          --producer-accept-list=DEST_PROJECT_ID `
          --subnets=default `
          --project=SOURCE_PROJECT_ID

        Windows (cmd.exe)

        gcloud compute network-attachments create NETWORK_ATTACHMENT ^
          --region=REGION ^
          --connection-preference=ACCEPT_MANUAL ^
          --producer-accept-list=DEST_PROJECT_ID ^
          --subnets=default ^
          --project=SOURCE_PROJECT_ID
      • 如果您想重复使用现有网络连接,请继续执行下一步。
    2. 允许 Database Migration Service 租户项目访问您的网络连接:您的网络连接必须允许来自 Database Migration Service 租户项目的连接。执行以下步骤:

      1. 通过执行试运行专用连接创建来检索 Database Migration Service 租户项目 ID(点击可展开):

        gcloud database-migration private-connections create --validate-only

        在使用下面的命令数据之前,请先进行以下替换:

        • 将 PRIVATE_CONN 替换为专用连接资源的名称。
        • 将 REGION 替换为专用连接的区域。
        • 将 NETWORK_ATTACHMENT_URI 替换为网络连接的 URI。

        执行以下命令:

        Linux、macOS 或 Cloud Shell

        gcloud database-migration private-connections create PRIVATE_CONN \
          --region=REGION \
          --network-attachment=NETWORK_ATTACHMENT_URI \
          --display-name=PRIVATE_CONN \
          --format="value(metadata.metadata.tenant_project_id)" \
          --validate-only

        Windows (PowerShell)

        gcloud database-migration private-connections create PRIVATE_CONN `
          --region=REGION `
          --network-attachment=NETWORK_ATTACHMENT_URI `
          --display-name=PRIVATE_CONN `
          --format="value(metadata.metadata.tenant_project_id)" `
          --validate-only

        Windows (cmd.exe)

        gcloud database-migration private-connections create PRIVATE_CONN ^
          --region=REGION ^
          --network-attachment=NETWORK_ATTACHMENT_URI ^
          --display-name=PRIVATE_CONN ^
          --format="value(metadata.metadata.tenant_project_id)" ^
          --validate-only

        保存返回的租户项目 ID,以便在后续命令中使用。

      2. 允许 Database Migration Service 租户项目和目标项目连接到网络连接(点击可展开):

        gcloud compute network-attachments update

        在使用下面的命令数据之前,请先进行以下替换:

        • 将 NETWORK_ATTACHMENT 替换为网络连接的名称。
        • 将 REGION 替换为区域。
        • 将 DEST_PROJECT_ID 替换为目标项目的项目 ID。
        • 将 DMS_TENANT_ID 替换为检索到的 Database Migration Service 租户项目 ID。
        • 将 SOURCE_PROJECT_ID 替换为源网络所在的项目 ID。

        执行以下命令:

        Linux、macOS 或 Cloud Shell

        gcloud compute network-attachments update NETWORK_ATTACHMENT \
          --region=REGION \
          --producer-accept-list=DEST_PROJECT_ID,DMS_TENANT_ID \
          --project=SOURCE_PROJECT_ID

        Windows (PowerShell)

        gcloud compute network-attachments update NETWORK_ATTACHMENT `
          --region=REGION `
          --producer-accept-list=DEST_PROJECT_ID,DMS_TENANT_ID `
          --project=SOURCE_PROJECT_ID

        Windows (cmd.exe)

        gcloud compute network-attachments update NETWORK_ATTACHMENT ^
          --region=REGION ^
          --producer-accept-list=DEST_PROJECT_ID,DMS_TENANT_ID ^
          --project=SOURCE_PROJECT_ID
    3. 创建 Database Migration Service 专用连接资源:运行以下命令(点击可展开):

      gcloud database-migration private-connections create

      在使用下面的命令数据之前,请先进行以下替换:

      • 将 PRIVATE_CONN 替换为专用连接资源的名称。
      • 将 REGION 替换为专用连接的区域。
      • 将 NETWORK_ATTACHMENT_URI 替换为网络连接的 URI。

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud database-migration private-connections create PRIVATE_CONN \
        --region=REGION \
        --network-attachment=NETWORK_ATTACHMENT_URI \
        --display-name=PRIVATE_CONN

      Windows (PowerShell)

      gcloud database-migration private-connections create PRIVATE_CONN `
        --region=REGION `
        --network-attachment=NETWORK_ATTACHMENT_URI `
        --display-name=PRIVATE_CONN

      Windows (cmd.exe)

      gcloud database-migration private-connections create PRIVATE_CONN ^
        --region=REGION ^
        --network-attachment=NETWORK_ATTACHMENT_URI ^
        --display-name=PRIVATE_CONN

    公共 IP

    如需连接到具有公共 IP 地址的源数据库,请执行以下步骤:

    1. 使用预留的公共 IP 创建专用连接。
      运行以下命令(点击可展开):

      gcloud database-migration private-connections create

      此示例使用可选的 --no-async 标志,以便同步执行所有操作。这意味着某些命令可能需要一段时间才能完成。您可以跳过 --no-async 标志,以异步方式运行命令。如果这样做,您需要使用 gcloud database-migration operations describe 命令来验证操作是否成功。

      在使用下面的命令数据之前,请先进行以下替换:

      • 将 CONNECTION_ID 替换为专用连接的标识符。
      • 将 REGION 替换为要在其中创建专用连接的 Google Cloud 区域。
      • 将 DISPLAY 替换为专用连接的易记显示名称。
      • 可选:您可以将 --reserved-public-ip 标志替换为 --reserved-public-ip-nat-ips-count,以预留 Database Migration Service 用于连接的多个专用公共 IP 地址。您最多可以预留 10 个 IP 地址。

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud database-migration private-connections create \
        CONNECTION_ID \
        --region=REGION \
        --display-name="DISPLAY" \
        --reserved-public-ip \
        --no-async

      Windows (PowerShell)

      gcloud database-migration private-connections create `
        CONNECTION_ID `
        --region=REGION `
        --display-name="DISPLAY" `
        --reserved-public-ip `
        --no-async

      Windows (cmd.exe)

      gcloud database-migration private-connections create ^
        CONNECTION_ID ^
        --region=REGION ^
        --display-name="DISPLAY" ^
        --reserved-public-ip ^
        --no-async
    2. 检索预留的公共 IP 地址。
      运行以下命令(点击可展开):

      gcloud database-migration connection-profiles fetch-static-ips

      在使用下面的命令数据之前,请先进行以下替换:

      • 将 REGION 替换为专用连接的 Google Cloud 区域。

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud database-migration connection-profiles fetch-static-ips \
        REGION \
        --fetch-reserved-public-ips

      Windows (PowerShell)

      gcloud database-migration connection-profiles fetch-static-ips `
        REGION `
        --fetch-reserved-public-ips

      Windows (cmd.exe)

      gcloud database-migration connection-profiles fetch-static-ips ^
        REGION ^
        --fetch-reserved-public-ips
    3. 将预留 IP 地址列入源数据库的许可清单。
      将上一步中检索到的 IP 地址添加到源数据库的传入许可清单中(例如,在 pg_hba.conf 配置、云服务商安全群组或网络防火墙规则中),以便 Database Migration Service 可以建立连接。

  2. 创建来源连接配置文件。
    运行以下命令(点击可展开):

    gcloud database-migration connection-profiles create postgresql

    此示例使用可选的 --no-async 标志,以便同步执行所有操作。这意味着某些命令可能需要一段时间才能完成。您可以跳过 --no-async 标志,以异步方式运行命令。如果这样做,您需要使用 gcloud database-migration operations describe 命令来验证操作是否成功。

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 SOURCE_CONN_ID 替换为您的来源连接配置文件标识符。
    • 将 REGION 替换为您要在其中保存连接配置文件的区域。
    • 将 SOURCE_PRIVATE_IP 替换为源数据库的专用 IP 地址。
    • 将 SOURCE_PORT 替换为源数据库的端口(默认值为 5432)。
    • 将 SOURCE_USER 替换为源数据库中迁移用户的用户名。
    • 将 SOURCE_PASSWORD 替换为源数据库上迁移用户的密码。
    • 将 PRIVATE_CONN 替换为专用连接资源的名称。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration connection-profiles create postgresql \
      SOURCE_CONN_ID \
      --region=REGION \
      --role=SOURCE \
      --host=SOURCE_PRIVATE_IP \
      --port=SOURCE_PORT \
      --username=SOURCE_USER \
      --password=SOURCE_PASSWORD \
      --private-connection=PRIVATE_CONN \
      --no-async

    Windows (PowerShell)

    gcloud database-migration connection-profiles create postgresql `
      SOURCE_CONN_ID `
      --region=REGION `
      --role=SOURCE `
      --host=SOURCE_PRIVATE_IP `
      --port=SOURCE_PORT `
      --username=SOURCE_USER `
      --password=SOURCE_PASSWORD `
      --private-connection=PRIVATE_CONN `
      --no-async

    Windows (cmd.exe)

    gcloud database-migration connection-profiles create postgresql ^
      SOURCE_CONN_ID ^
      --region=REGION ^
      --role=SOURCE ^
      --host=SOURCE_PRIVATE_IP ^
      --port=SOURCE_PORT ^
      --username=SOURCE_USER ^
      --password=SOURCE_PASSWORD ^
      --private-connection=PRIVATE_CONN ^
      --no-async
  3. 创建目标连接配置文件。
    根据您是要迁移到新的还是现有的 AlloyDB for PostgreSQL 集群,选择相应的标签页:

    新集群

    如需为快速启动迁移使用新的目标集群,请先使用 AlloyDB for PostgreSQL Google Cloud CLI 创建集群及其主实例,然后创建目标连接配置文件。请按以下步骤操作:

    1. 使用 AlloyDB for PostgreSQL Google Cloud CLI 创建集群及其主实例。 请务必使用 --enable-private-service-connect 标志为目标集群启用 Private Service Connect。快速启动迁移仅支持启用了 Private Service Connect 的目标。
    2. 为新集群创建目标连接配置文件。 展开以下部分,查看完整的命令详情。

      gcloud database-migration connection-profiles create postgresql

      此示例使用可选的 --no-async 标志,以便同步执行所有操作。这意味着某些命令可能需要一段时间才能完成。您可以跳过 --no-async 标志,以异步方式运行命令。如果这样做,您需要使用 gcloud database-migration operations describe 命令来验证操作是否成功。

      在使用下面的命令数据之前,请先进行以下替换:

      • 将 DEST_CONN_ID 替换为目标连接配置文件标识符。
      • 将 REGION 替换为您要在其中保存连接配置文件的区域。此区域应与目标集群区域相同。
      • 将 DEST_CLUSTER 替换为目标 AlloyDB for PostgreSQL 集群的 ID 或完整资源路径。
      • 将 DEST_USER 替换为目标数据库中迁移用户的用户名。
      • 将 DEST_PASSWORD 替换为目标数据库中迁移用户的密码。

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud database-migration connection-profiles create postgresql DEST_CONN_ID \
        --region=REGION \
        --alloydb-cluster=DEST_CLUSTER \
        --username=DEST_USER \
        --password=DEST_PASSWORD \
        --role=DESTINATION \
        --no-async

      Windows (PowerShell)

      gcloud database-migration connection-profiles create postgresql DEST_CONN_ID `
        --region=REGION `
        --alloydb-cluster=DEST_CLUSTER `
        --username=DEST_USER `
        --password=DEST_PASSWORD `
        --role=DESTINATION `
        --no-async

      Windows (cmd.exe)

      gcloud database-migration connection-profiles create postgresql DEST_CONN_ID ^
        --region=REGION ^
        --alloydb-cluster=DEST_CLUSTER ^
        --username=DEST_USER ^
        --password=DEST_PASSWORD ^
        --role=DESTINATION ^
        --no-async

      您应该会收到类似如下所示的响应:

      Waiting for connection profile [CONNECTION_PROFILE_ID]
      to be created with [OPERATION_ID]
      
      Waiting for operation [OPERATION_ID] to complete...done.
      
      Created connection profile CONNECTION_PROFILE_ID [OPERATION_ID]
      

    现有集群

    如需迁移到现有目标集群,请创建指向预先创建的集群的连接配置文件。运行以下命令(点击可展开):

    gcloud database-migration connection-profiles create postgresql

    此示例使用可选的 --no-async 标志,以便同步执行所有操作。这意味着某些命令可能需要一段时间才能完成。您可以跳过 --no-async 标志,以异步方式运行命令。如果这样做,您需要使用 gcloud database-migration operations describe 命令来验证操作是否成功。

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 DEST_CONN_ID 替换为目标连接配置文件标识符。
    • 将 REGION 替换为您要在其中保存连接配置文件的区域。此区域应与目标集群区域相同。
    • 将 DEST_CLUSTER 替换为目标 AlloyDB for PostgreSQL 集群的 ID 或完整资源路径。
    • 将 DEST_USER 替换为目标数据库中迁移用户的用户名。
    • 将 DEST_PASSWORD 替换为目标数据库中迁移用户的密码。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID \
      --region=REGION \
      --alloydb-cluster=DEST_CLUSTER \
      --username=DEST_USER \
      --password=DEST_PASSWORD \
      --role=DESTINATION \
      --no-async

    Windows (PowerShell)

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID `
      --region=REGION `
      --alloydb-cluster=DEST_CLUSTER `
      --username=DEST_USER `
      --password=DEST_PASSWORD `
      --role=DESTINATION `
      --no-async

    Windows (cmd.exe)

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID ^
      --region=REGION ^
      --alloydb-cluster=DEST_CLUSTER ^
      --username=DEST_USER ^
      --password=DEST_PASSWORD ^
      --role=DESTINATION ^
      --no-async

    您应该会收到类似如下所示的响应:

    Waiting for connection profile [CONNECTION_PROFILE_ID]
    to be created with [OPERATION_ID]
    
    Waiting for operation [OPERATION_ID] to complete...done.
    
    Created connection profile CONNECTION_PROFILE_ID [OPERATION_ID]
    
  4. 创建持续迁移作业。
    运行以下命令以创建持续迁移作业(点击可展开):

    gcloud database-migration migration-jobs create

    此示例使用可选的 --no-async 标志,以便同步执行所有操作。这意味着某些命令可能需要一段时间才能完成。您可以跳过 --no-async 标志,以异步方式运行命令。如果这样做,您需要使用 gcloud database-migration operations describe 命令来验证操作是否成功。

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。
    • 将 REGION 替换为您要保存迁移作业的区域。
    • 将 SOURCE_CONN_ID 替换为来源连接配置文件标识符。
    • DEST_CONN_ID 替换为目标连接配置文件标识符。
    • 将 DATABASES_LIST 替换为您要迁移的数据库的英文逗号分隔列表。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs create \
      MIGRATION_JOB_ID \
      --region=REGION \
      --type=CONTINUOUS \
      --source=SOURCE_CONN_ID \
      --destination=DEST_CONN_ID \
      --use-postgres-native \
      --postgres-max-additional-subscriptions=10 \
      --databases-filter=DATABASES_LIST \
      --no-async

    Windows (PowerShell)

    gcloud database-migration migration-jobs create `
      MIGRATION_JOB_ID `
      --region=REGION `
      --type=CONTINUOUS `
      --source=SOURCE_CONN_ID `
      --destination=DEST_CONN_ID `
      --use-postgres-native `
      --postgres-max-additional-subscriptions=10 `
      --databases-filter=DATABASES_LIST `
      --no-async

    Windows (cmd.exe)

    gcloud database-migration migration-jobs create ^
      MIGRATION_JOB_ID ^
      --region=REGION ^
      --type=CONTINUOUS ^
      --source=SOURCE_CONN_ID ^
      --destination=DEST_CONN_ID ^
      --use-postgres-native ^
      --postgres-max-additional-subscriptions=10 ^
      --databases-filter=DATABASES_LIST ^
      --no-async

    您应该会收到类似如下所示的响应:

    Waiting for migration job [MIGRATION_JOB_ID]
    to be created with [OPERATION_ID]
    
    Waiting for operation [OPERATION_ID] to complete...done.
    
    Created migration job MIGRATION_JOB_ID [OPERATION_ID]
    
  5. 启动迁移作业。
    如需启动持续迁移作业,请运行以下命令(点击可展开):

    gcloud database-migration migration-jobs start

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。

      如果您不知道标识符,可以使用 gcloud database-migration migration-jobs list 命令列出给定区域中的所有迁移作业并查看其标识符。

    • 将 REGION 替换为保存迁移作业的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    start MIGRATION_JOB_ID \
      --region=REGION

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    start MIGRATION_JOB_ID `
      --region=REGION

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    start MIGRATION_JOB_ID ^
      --region=REGION

    结果

    该操作以异步方式执行。 因此,此命令会返回一个表示长时间运行的操作的 操作实体:

    done: false
    metadata:
      '@type': type.googleapis.com/google.cloud.clouddms.v1.OperationMetadata
      apiVersion: v1
      createTime: '2024-02-20T12:20:24.493106418Z'
      requestedCancellation: false
      target: MIGRATION_JOB_ID
      verb: start
    name: OPERATION_ID
    

    如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:

完成迁移

当您决定将应用流量切换到新的 AlloyDB for PostgreSQL 集群时,请按照以下步骤完成迁移:

  1. 停止对源数据库执行的所有写入操作。您可以将源数据库切换到只读模式,以便在割接期间保留操作查询功能。
  2. 提升迁移作业。对于快速启动迁移,目标集群在迁移过程中仍可写入。提升迁移作业只会结束复制,不会对目标集群产生任何影响。
  3. 可选: 验证迁移数据的完整性和一致性。

后续步骤