创建到现有目标实例的迁移作业

迁移到现有目标实例时,对于标准迁移,Database Migration Service 会降级目标实例,将其配置为外部副本。降级实例不会将 Cloud SQL for PostgreSQL 置于只读模式,但在迁移过程中执行某些操作可能会导致迁移错误。在迁移到现有目标实例时,请注意以下操作注意事项:

  • 实例降级:对于标准迁移,Database Migration Service 会将目标实例降级,以将其配置为源数据库的副本。 快速启动迁移不需要也不执行目标实例降级。
  • 避免对迁移数据执行写入操作:请勿在目标实例中对迁移中包含的表或数据库执行写入操作(例如 INSERT、UPDATE、DELETE 或 DDL 架构更改)。此类操作可能会导致与来自源的数据发生复制冲突。
  • 管理数据库用户:您可以随时使用标准 psql 命令或通过 Google Cloud 控制台中的 Cloud SQL 创建和管理数据库用户。如需了解详情,请参阅 Cloud SQL 文档中的管理用户。
  • 备份和读取副本:在持续复制期间,自动备份和时间点恢复 (PITR) 会暂停,并且在迁移作业升级之前,您无法从目标实例创建 Cloud SQL 读取副本。

如需了解详情,请参阅现有实例的已知限制。

Database Migration Service 会使用迁移作业将数据从源数据库实例迁移到目标数据库实例。为现有目标实例创建迁移作业包括:

  • 定义迁移作业的设置
  • 定义来源设置并选择要迁移的数据库
  • 选择现有目标数据库实例
  • 将现有实例降级,以将其配置为源数据库的副本(仅限标准迁移)
  • 在源数据库实例和目标数据库实例之间建立连接
  • 测试迁移作业,以确保您为作业提供的连接信息有效

准备工作

在创建到现有目标数据库实例的迁移作业之前,请确保您:

  1. 验证此迁移类型是否可以支持您的场景。 例如,如果您要迁移到在 Database Migration Service 之外创建的数据库,则 Cloud SQL 目标实例必须为空或仅包含系统配置数据。如需了解详情,请参阅已知限制。
  2. 创建目标数据库实例。 请参阅 Cloud SQL 文档中的创建实例。

  3. 准备源数据库实例。请参阅以下页面:
    1. 配置源数据库
    2. 创建来源连接配置文件
    3. 配置连接

如需创建到现有目标实例的迁移作业,请执行以下操作:

控制台

定义迁移作业的设置

  1. 在 Google Cloud 控制台中,前往迁移作业页面。

    前往“迁移作业”

  2. 点击创建迁移作业。

    系统会打开迁移作业配置向导页面。 此向导包含多个面板,可引导您完成每个配置步骤。

    您可以随时点击保存并退出,暂停创建迁移作业。您在此时之前输入的所有数据都会保存在草稿迁移作业中。 您可以稍后完成迁移作业草稿。

  3. 在开始使用页面上,输入以下信息:
    1. 迁移作业名称

      这是迁移作业的人类可读名称。此值会显示在 Google Cloud 控制台中。

    2. 迁移任务 ID

      这是迁移作业的机器可读标识符。 您可以使用此值通过 Database Migration Service Google Cloud CLI 命令或 API 来处理迁移作业。

    3. 从源数据库引擎列表中,选择 PostgreSQL。

      目标数据库引擎字段会自动填充,且无法更改。

    4. 选择您保存迁移作业的区域。

      Database Migration Service 是一款完全区域性的产品,这意味着与迁移相关的所有实体(源和目标连接配置文件、迁移作业、目标数据库)都必须保存在单个区域中。根据需要数据的服务(例如 Compute Engine 实例、App Engine 应用及其他服务)的位置选择区域。选择目标区域后,此选择便无法更改。

    5. 指定迁移作业类型:一次性(仅快照)或持续(快照 + 持续更改)。
  4. 点击保存并继续。

指定有关来源连接配置文件的信息

在定义来源页面上,执行以下步骤:

  1. 从来源连接配置文件下拉菜单中,选择源数据库的连接配置文件。
  2. 在自定义数据转储配置部分中,点击显示数据转储配置。

    数据转储并行速度与源数据库上的负载量有关:

    • 最佳(推荐):提供平衡的性能和源数据库负载。
    • 最大:提供最高的转储速度,但可能会导致源数据库负载增加。
    • 最低:占用源数据库上最少的计算资源,但转储吞吐量可能较低。

    如果您选择调整后的数据转储并行设置,请务必增加源数据库上的 max_replication_slots、max_wal_senders 和 max_worker_processes 参数。

  3. 点击保存并继续。

选择目标 Cloud SQL 实例

  1. 从目标实例类型菜单中,选择现有实例。
  2. 在选择目标实例部分中,选择目标实例。
  3. 查看实例详情部分中的信息,然后点击选择并继续。

    如需在标准迁移中迁移到现有目标数据库,Database Migration Service 会降级目标实例并将其配置为副本。 如需表明可以安全地执行降级,请在确认窗口中输入目标实例标识符。

  4. 点击确认并继续。

在源数据库实例和目标数据库实例之间建立连接

从连接方法下拉菜单中,选择一种网络连接方法。此方法定义了目标 Cloud SQL 实例如何连接到源数据库。当前的网络连接方法包括 IP 许可清单、反向 SSH 隧道、Private Service Connect 接口和 VPC 对等互连。

如果您想使用…请执行以下操作
IP 许可清单网络连接方法 您需要指定目标实例的传出 IP 地址。如果您创建的 Cloud SQL 实例是高可用性实例,请同时添加主实例和次要实例的传出 IP 地址。
反向 SSH 隧道网络连接方法 您需要选择将托管隧道的 Compute Engine 虚拟机实例。

指定实例后,Google 将提供一个脚本,用于执行在源数据库和目标数据库之间设置隧道的步骤。您需要在 Google Cloud CLI 中运行该脚本。

从同时连接到源数据库和 Google Cloud的机器运行命令。

Private Service Connect 接口连接方法 Database Migration Service 会自动建立所需的连接。 只有当您拥有启用了 Private Service Connect 且具有网络连接的目标实例时,此连接方法才可用。如需详细了解 Private Service Connect 接口,请参阅 Cloud SQL 文档中的 Private Service Connect 出站连接。
VPC 对等互连网络连接方法 您需要选择源数据库所在的 VPC 网络。Cloud SQL 实例将更新为连接到此网络。

选择并配置网络连接后,点击配置并继续。

配置迁移数据库

您可以从源实例迁移所有数据库,也可以仅选择特定数据库。目标实例不能包含与您选择迁移的数据库同名的任何数据库。如果 Database Migration Service 遇到数据库名称冲突,则会在迁移前删除目标数据库中的冲突数据库。

  1. 从要迁移的数据库列表中,选择以下选项之一:
    • 所有数据库:选择源中存在的所有数据库。
    • 特定数据库:可让您从来源中存在的所有数据库中选择特定数据库。
  2. 如果您想迁移特定数据库,可以过滤显示的列表,然后选择您希望 Database Migration Service 迁移到目标位置的数据库。

    如果未显示列表,而是显示数据库发现错误,请点击重新加载。如果数据库发现失败,作业会迁移所有数据库。您可以继续创建迁移作业,稍后再修正连接错误。

  3. 点击保存并继续。

测试、创建和运行迁移作业

在最后一步中,查看迁移作业设置、来源、目标和连接方法的摘要,然后测试迁移作业设置的有效性。如果遇到任何问题,您可以修改迁移作业的设置。并非所有设置都可以修改。

  1. 在测试并创建迁移作业页面上,点击测试作业。

    如果测试失败,您可以在流的适当部分解决问题,然后返回重新测试。如需了解如何排查迁移作业测试失败的问题,请参阅诊断 PostgreSQL 问题。

  2. 迁移作业测试完成后,点击创建并启动作业以创建迁移作业并立即启动,或点击创建作业以创建迁移作业但不立即启动。

    如果作业在创建时未启动,则可以从迁移作业页面点击启动来启动该作业。无论迁移作业何时开始,您的组织都需要为目标实例的存在付费。

    您的迁移正在进行中。启动迁移作业后,Database Migration Service 会开始初始完整转储和复制。如需了解详情,请参阅已知限制。

  3. 继续查看迁移作业。

Google Cloud CLI

使用 Google Cloud CLI 迁移到现有实例时,您必须手动为目标实例创建连接配置文件。使用 Google Cloud 控制台时,您无需执行此操作,因为 Database Migration Service 会为您创建和移除目标连接配置文件。

  1. 创建目标连接配置文件。
    通过运行 gcloud database-migration connection-profiles create 命令,为现有目标实例创建目标连接配置文件(点击链接可展开):

    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]
    
  2. 创建迁移作业。
    以下示例展示了在源数据库和目标数据库之间使用专用 IP 连接的迁移场景。如果您使用其他连接类型(例如 VPC 对等互连或反向 SSH 隧道),请务必添加所需的标志,例如 --peer-vpc、--vm、--vm-ip、--vm-port、--vpc。 如需了解详情,请参阅配置连接和 Google Cloud CLI 示例。
    运行以下命令(点击链接可展开):

    gcloud database-migration migration-jobs create

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

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

    • 将 MIGRATION_JOB_ID 替换为迁移作业的机器可读标识符。您可以使用此值通过 Database Migration Service Google Cloud CLI 命令或 API 来处理迁移作业。
    • 将 REGION 替换为您要保存迁移作业的区域标识符。
    • 将 MIGRATION_JOB_NAME 替换为迁移作业的人类可读名称。此值会显示在 Google Cloud 控制台中的 Database Migration Service 中。
    • SOURCE_CONNECTION_PROFILE_ID 替换为来源连接配置文件的机器可读标识符。如需了解详情,请参阅创建来源连接配置文件。
    • DESTINATION_CONNECTION_PROFILE_ID 替换为目标连接配置文件的机器可读标识符。
    • 可选:默认情况下,Database Migration Service 会迁移来源中的所有数据库。如果您只想迁移特定数据库,请使用 --databases-filter 标志,并以英文逗号分隔列表的形式指定其标识符。

      例如:--databases-filter=my-business-database,my-other-database

      您稍后可以使用 gcloud database-migration migration-jobs update 命令修改使用 --databases-filter 标志创建的迁移作业。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    create MIGRATION_JOB_ID \
      --no-async \
      --region=REGION \
      --display-name=MIGRATION_JOB_NAME \
      --source=SOURCE_CONNECTION_PROFILE_ID \
      --destination=DESTINATION_CONNECTION_PROFILE_ID \
      --type=CONTINUOUS

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    create MIGRATION_JOB_ID `
      --no-async `
      --region=REGION `
      --display-name=MIGRATION_JOB_NAME `
      --source=SOURCE_CONNECTION_PROFILE_ID `
      --destination=DESTINATION_CONNECTION_PROFILE_ID `
      --type=CONTINUOUS

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    create MIGRATION_JOB_ID ^
      --no-async ^
      --region=REGION ^
      --display-name=MIGRATION_JOB_NAME ^
      --source=SOURCE_CONNECTION_PROFILE_ID ^
      --destination=DESTINATION_CONNECTION_PROFILE_ID ^
      --type=CONTINUOUS

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

    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]
    
  3. 降级目标数据库。
    对于标准迁移,Database Migration Service 要求您在启动迁移作业之前,先将现有目标数据库实例降级,以将其配置为外部副本。运行 gcloud database-migration migration-jobs demote-destination 命令(点击链接可展开):

    gcloud database-migration migration-jobs demote-destination

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

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

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

    • 将 REGION 替换为保存连接配置文件的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    demote-destination MIGRATION_JOB_ID \
      --region=REGION

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    demote-destination MIGRATION_JOB_ID `
      --region=REGION

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    demote-destination 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: demote-destination
    name: OPERATION_ID
    

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

  4. 可选:验证迁移作业。
    此时,您的迁移作业已配置并连接到目标数据库实例。您可以使用 verify、start、stop、restart 和 resume 操作来管理它。 我们建议您先运行 gcloud database-migration migration-jobs verify 命令来验证迁移作业(点击链接可展开):

    gcloud database-migration migration-jobs verify

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

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

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

    • 将 REGION 替换为保存连接配置文件的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

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

    Windows (PowerShell)

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

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    verify 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: verify
    name: OPERATION_ID
    

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

  5. 启动迁移作业。
    通过运行 gcloud database-migration migration-jobs start 命令启动迁移作业(点击链接可展开):

    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
    

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

  6. 提升迁移作业。
    迁移达到变更数据捕获 (CDC) 阶段后,您可以将目标数据库实例从副本提升为独立实例。 运行 gcloud database-migration migration-jobs promote 命令(点击链接可展开):

    gcloud database-migration migration-jobs promote

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

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

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

    • 将 REGION 替换为保存连接配置文件的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

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

    Windows (PowerShell)

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

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    promote 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
    

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