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

使用 Database Migration Service 创建目标实例时,该实例不会降级,也不会以只读模式运行,但在迁移过程中执行某些操作可能会导致迁移错误。在迁移到新的目标实例时,请注意以下操作注意事项:

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

如需了解详情,请参阅已知限制。

创建迁移作业包括:

  1. 定义迁移作业的设置。
  2. 定义来源设置并选择要迁移的数据库。
  3. 定义目标 Cloud SQL 数据库实例的设置并创建实例。
  4. 在源数据库实例和目标数据库实例之间建立连接。
  5. 测试迁移作业,以确保您为作业提供的连接信息有效。

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

控制台

定义迁移作业的设置

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

    前往“迁移作业”

  2. 点击创建迁移作业。

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

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

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

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

    2. 迁移任务 ID

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

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

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

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

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

    5. 指定迁移作业类型:一次性或持续。
    6. 查看为您的环境生成的前提条件。请确保您的源数据库配置正确。如需了解详情,请参阅配置源数据库。
  4. 点击保存并继续。

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

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

  1. 从来源连接配置文件下拉菜单中,选择源数据库的连接配置文件(或点击创建连接配置文件,请参阅创建来源连接配置文件)。
  2. 在自定义并行处理配置部分中,点击显示并行处理配置。

    数据转储并行处理的速度与源数据库上的负载量有关。您可以使用以下设置:

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

    如果您选择调整后的并行设置,请务必增加源数据库上的 max_replication_slots、max_wal_senders 和 max_worker_processes 参数。您可以在迁移作业创建结束时运行迁移作业测试,以验证配置。

  3. 点击保存并继续。

配置并创建 Cloud SQL 目标实例

  1. 在定义目标数据库页面上,从目标实例类型下拉菜单中选择新实例。定义所有相关设置:
    1. 在目标实例 ID 字段中,提供 Cloud SQL 实例的标识符,或使用自动生成的标识符。

      请勿在标识符中包含敏感信息或个人身份信息。无需在实例名称中包含项目 ID。此操作将在适当的位置(例如在日志文件中)自动完成。

    2. 在密码字段中,为目标 Cloud SQL 实例提供字母数字密码。这是实例中 postgres 管理员账号的密码。

      您可以手动输入密码,也可以点击生成以让 Database Migration Service 自动为您创建密码。

    3. 从数据库版本下拉菜单中,选择目标实例的数据库版本。

      详细了解跨版本迁移支持。

    4. 为目标实例选择 Cloud SQL for PostgreSQL 版本。 有两个选项可供选择:Cloud SQL for PostgreSQL 企业版和 Cloud SQL for PostgreSQL 企业 Plus 版。

      Cloud SQL for PostgreSQL 版本具有不同的功能集、可用机器类型和价格。请务必参阅 Cloud SQL 文档,选择适合您需求的版本。如需了解详情,请参阅 Cloud SQL for PostgreSQL 版本简介。

    5. 区域菜单会显示您在开始页面上选择的区域。

      如果要将实例配置为高可用性,请选择多个可用区(高可用性)。您可以同时选择主要可用区和次要可用区。 在创建实例期间使用次要可用区时,适用以下条件:

      • 主要可用区默认为任意,次要可用区默认为任意(不同于主要可用区)。
      • 如果同时指定主要和次要可用区,则它们必须是不同的可用区。
    6. 在连接部分中,选择是为目标实例添加公共 IP 地址还是专用 IP 地址。 您可以将实例配置为同时具有这两种类型的 IP 地址,但迁移至少需要一种类型。选择以下选项之一:
      • 如果您想使用 VPC 对等互连或反向 SSH 隧道进行迁移,请选择专用 IP。
        • 如需启用专用 IP 连接,请确保您满足所有其他网络要求。

          展开此部分可查看完整的专用 IP 要求。

        • 选择要建立对等互连的关联 VPC 网络。如果您计划使用 VPC 对等互连连接到迁移来源,请选择实例所在的 VPC。
        • 如果从未为所选 VPC 配置过代管式服务网络,您可以选择一个 IP 范围并点击连接,也可以使用自动选择的 IP 范围并点击分配并连接。
      • 如果您想通过互联网使用 IP 许可清单进行迁移,请选择公共 IP。

        (可选)在公共 IP 下,点击已获授权的网络字段,然后授权网络或代理连接到 Cloud SQL 实例。网络仅通过您提供的地址获得授权。请参阅 Cloud SQL 文档中的配置公共 IP。

      您将在后续步骤中配置迁移作业连接性。如需详细了解可用的网络方法,请参阅配置连接性。

  2. 选择 Cloud SQL 实例的机器类型。详细了解 PostgreSQL 机器类型。
  3. 对于 Cloud SQL for PostgreSQL 企业 Plus 版:如果您想在目标数据库中使用数据缓存功能,请选中启用数据缓存复选框。

    数据缓存是一项可选功能,适用于 Cloud SQL for PostgreSQL 企业 Plus 版实例,可为目标数据库添加高速本地固态硬盘。 此功能可能会给 Cloud SQL 带来额外费用。 如需详细了解数据缓存,请参阅 Cloud SQL 文档中的数据缓存概览。

  4. 指定 Cloud SQL 实例的存储类型。您可以选择固态硬盘 (SSD) 或硬盘驱动器 (HDD)。
  5. 指定 Cloud SQL 实例的存储容量(以 GB 为单位)。

    确保实例有足够的存储容量来处理源数据库中的数据。您可以随时增加此容量,但不能减少。

  6. (可选)为目标实例配置数据加密选项或资源标签。

    展开此部分可查看可选步骤。

    点击显示可选配置,然后:

    1. 指定是否要管理从源迁移到目标的数据的加密。默认情况下,您的数据使用由 Google Cloud管理的密钥进行加密。如果您希望管理加密,可以使用由客户管理的加密密钥 (CMEK)。为此,请执行以下操作:

      1. 选中使用客户管理的加密密钥 (CMEK) 复选框。
      2. 从选择客户管理的密钥菜单中,选择您的 CMEK。

      如果您没有看到密钥,请点击输入密钥资源名称以提供要使用的密钥的资源名称。密钥资源名称示例:projects/my-project-name/locations/my-location/keyRings/my-keyring/cryptoKeys/my-key。

    2. 添加要应用于数据库服务器的所有必要标志。 如果可能,请确保所创建的目标 Cloud SQL 实例上的数据库标志与源数据库上的数据库标志相同。详细了解 PostgreSQL 支持的数据库标志。
    3. 添加特定于 Cloud SQL 实例的所有标签。

      标签可帮助您整理实例。例如,您可以按成本中心或环境来整理标签。您的账单中也会包含标签,便于您按标签查看费用分布情况。

  7. 点击创建目标位置并继续。 Database Migration Service 现在正在创建 Cloud SQL 目标实例。 此过程可能需要几分钟时间。

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

从连接方法下拉菜单中,选择一种网络连接方法。此方法定义了新创建的 Cloud SQL 实例将如何连接到源数据库。用于迁移到新实例的当前网络连接方法包括 IP 许可清单、反向 SSH 隧道和 VPC 对等互连。

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

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

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

VPC 对等互连网络连接方法 您需要选择源数据库所在的 VPC 网络。Cloud SQL 实例将更新为连接到此网络。

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

配置迁移数据库

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

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

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

  3. 点击保存并继续。

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

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

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

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

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

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

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

  3. 继续查看迁移作业。

Google Cloud CLI

  1. 创建目标连接配置文件。
    使用 Google Cloud CLI 迁移到新的目标实例时,您只需执行一项操作即可创建目标实例和连接配置文件。
    运行以下命令(点击链接可展开):

    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. 创建迁移作业。
    如果您使用 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]