使用快速入门迁移功能迁移到 Cloud SQL


本页面介绍了如何执行同构 PostgreSQL 迁移到 Cloud SQL for PostgreSQL 的快速迁移。

概览

快速启动迁移是适用于同构 PostgreSQL 场景的轻量级持续迁移流程。借助快速启动迁移,Database Migration Service 可以自动设置迁移数据库所需的一切:网络组件(网络连接、子网、专用连接配置)、连接配置文件和迁移作业。

借助快速启动迁移,您可以将数据迁移到现有 Cloud SQL 实例,也可以在配置迁移时创建新实例。快速启动迁移最适合以下情况:

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

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

  • 必须在 VPC 网络中为源数据库分配专用 IP 地址。Database Migration Service 使用 Private Service Connect 接口(网络连接)连接到源数据库。 快速启动迁移不支持公共 IP 连接。

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

准备工作

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

    转到“项目选择器”

  3. 启用 Database Migration Service、Compute Engine、Network Connectivity Center 和 Cloud SQL Admin API。

    启用 API

所需的角色

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

源项目中的角色和权限

在 Google Cloud 源数据库所在的项目中,向特定账号授予以下角色:

  • 对于执行迁移的用户账号: Compute Network Admin 角色 (roles/compute.networkAdmin)
  • 对于目标项目的 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.*
  • compute.subnetworks.*
  • compute.networkAttachments.*

对于目标项目的 Database Migration Service 服务账号:compute.networkAttachments.get。

目标项目中的角色和权限

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

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

所需权限(目标位置)

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

  • datamigration.*
  • cloudsql.instances.create
  • cloudsql.instances.delete
  • cloudsql.instances.get
  • cloudsql.instances.list
  • cloudsql.instances.update
  • cloudsql.instances.connect
  • cloudsql.instances.executeSql
  • cloudsql.instances.export
  • cloudsql.instances.import
  • cloudsql.instances.login
  • cloudsql.operations.get
  • cloudsql.users.get
  • cloudsql.users.list
  • cloudsql.users.create
  • cloudsql.users.update
  • cloudsql.users.delete

配置源数据库

如需配置 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 控制台创建并运行快速入门迁移,请执行以下操作:

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

    前往“开始使用”

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

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

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

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

  5. 在配置迁移部分中,执行以下操作:
    1. 从目标区域菜单中,选择目标 Cloud SQL 实例的区域。
    2. 在迁移前缀框中,输入一个易于理解的字符串,该字符串将添加到为快速启动迁移创建的所有迁移实体的名称中:连接配置文件、专用连接配置、网络连接及其子网,以及迁移作业。
    3. 从配置类型菜单中,选择以下选项之一:
      1. 现有连接配置:如果您已有网络连接和使用 Private Service Connect 接口方法的专用连接配置,请选择此选项。如果您之前使用过快速启动迁移,并且想要重复使用相同的网络资源,则最好使用此选项。
      2. 新连接配置:选择此选项可在源数据库 VPC 网络中创建新的网络连接和网络连接子网。 专用连接配置将在目标实例所在的项目中创建。
    4. 点击继续。
  6. 在连接来源部分中,执行以下操作:
    1. 输入源数据库的主机名或专用 IP 地址。必须能够从来源 VPC 网络访问来源数据库地址。
    2. 输入用于访问主机的端口。默认 PostgreSQL 端口为 5432。
    3. 输入源数据库中专用迁移账号的用户名和密码。
    4. 从加密类型菜单中,选择以下选项之一:
      • 无:如果您的源数据库不需要 SSL/TLS 加密连接。
      • 必需:如果您的源数据库需要 SSL/TLS 加密连接。此选项不需要任何证书验证。
    5. 在要迁移的数据库菜单中,点击自定义。 使用侧边栏仅选择要迁移到 Cloud SQL 的数据库。
    6. 点击继续。
  7. 在配置目标部分中,您可以创建新的目标实例,也可以选择现有目标实例。

    新实例

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

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

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

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

    现有实例

    您可以将数据库迁移到已存在的实例。 确保目标实例已启用 Private Service Connect,并且不强制执行 mTLS 连接。请执行以下操作:

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

    Database Migration Service 现在会创建迁移作业并开始迁移过程。您可以在 Database Migration Service 迁移作业详情中监控迁移进度。如需了解详情,请参阅 管理迁移作业。

gcloud

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

  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
  4. 创建来源连接配置文件。
    运行以下命令(点击可展开):

    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
  5. 创建目标连接配置文件。
    根据您是要迁移到新的 Cloud SQL 实例还是现有 Cloud SQL 实例,选择相应的标签页:

    新实例

    如需为快速入门迁移使用新的目标实例,请先使用 Cloud SQL Google Cloud CLI 创建该实例,然后创建目标连接配置文件。请按以下步骤操作:

    1. 使用 Cloud SQL 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_INSTANCE 替换为您预先创建的目标 Cloud SQL 实例的 ID。
      • 将 DEST_USER 替换为目标数据库中迁移用户的用户名。
      • 将 DEST_PASSWORD 替换为目标数据库中迁移用户的密码。

      执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud database-migration connection-profiles create postgresql DEST_CONN_ID \
        --region=REGION \
        --cloudsql-instance=DEST_INSTANCE \
        --username=DEST_USER \
        --password=DEST_PASSWORD \
        --role=DESTINATION \
        --no-async

      Windows (PowerShell)

      gcloud database-migration connection-profiles create postgresql DEST_CONN_ID `
        --region=REGION `
        --cloudsql-instance=DEST_INSTANCE `
        --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 ^
        --cloudsql-instance=DEST_INSTANCE ^
        --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_INSTANCE 替换为您预先创建的目标 Cloud SQL 实例的 ID。
    • 将 DEST_USER 替换为目标数据库中迁移用户的用户名。
    • 将 DEST_PASSWORD 替换为目标数据库中迁移用户的密码。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID \
      --region=REGION \
      --cloudsql-instance=DEST_INSTANCE \
      --username=DEST_USER \
      --password=DEST_PASSWORD \
      --role=DESTINATION \
      --no-async

    Windows (PowerShell)

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID `
      --region=REGION `
      --cloudsql-instance=DEST_INSTANCE `
      --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 ^
      --cloudsql-instance=DEST_INSTANCE ^
      --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]
    
  6. 创建迁移作业。
    运行以下命令(点击可展开):

    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]
    
  7. 运行迁移作业。
    启动迁移作业(点击可展开):

    gcloud database-migration migration-jobs start

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

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

    • 将 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
    

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

完成迁移

当您决定将应用切换到新的 Cloud SQL 实例时,请按照以下步骤完成迁移:

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

后续步骤