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

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

  • 定义迁移作业的设置
  • 选择源数据库连接配置文件
  • 选择现有目标数据库实例
  • 降级现有实例以将其转换为读取副本
  • 在源数据库实例和目标数据库实例之间建立连接
  • 测试迁移作业,以确保您为作业提供的连接信息有效

准备工作

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

  1. 验证此迁移类型是否支持您的方案。 例如,如果您要迁移到在 Database Migration Service 之外创建的数据库,则 Cloud SQL 目标实例必须为空或仅包含系统配置数据。如需了解详情,请参阅已知限制。
  2. 创建必要的资源、配置源数据库并建立网络连接。创建迁移作业是完整迁移过程中的一个步骤。建议您按照迁移分步演练操作,并在完成迁移作业步骤后返回此过程。请参阅 迁移到现有实例。

使用 Google Cloud 控制台创建迁移作业

如果您使用 Google Cloud 控制台迁移到现有实例,Database Migration Service 会自动为您管理目标连接配置文件。如需使用 Google Cloud 控制台创建到现有实例的迁移作业,请执行以下操作:

定义迁移作业的设置

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

    前往“迁移作业”

  2. 点击创建迁移作业。

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

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

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

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

    2. 迁移任务 ID

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

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

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

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

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

  4. 点击保存并继续。

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

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

  1. 从来源连接配置文件下拉菜单中,选择源数据库的连接配置文件。
  2. 在自定义完全转储配置部分中,点击修改配置。
  3. 在修改完全转储配置面板中,从完全转储方法下拉菜单中选择以下选项之一:
    • 基于物理:如果您想使用 Percona XtraBackup 实用程序提供自己的备份文件,请选择此选项。此方法需要额外的准备步骤。如需查看有关使用 Percona XtraBackup 生成的物理备份文件的完整指南,请参阅使用 Percona XtraBackup 物理文件迁移数据库。
    • 基于逻辑:如果您想使用由 mysqldump 实用程序创建的逻辑备份文件,请选择此选项。Database Migration Service 可以为您自动生成此备份文件,您也可以提供自己的副本。
  4. 修改其余转储设置。执行以下操作之一:
    • 如果您使用物理备份文件,请在提供文件夹中点击浏览,然后选择您上传完整转储文件的文件夹。请务必选择包含完整备份文件的专用文件夹,而不是存储桶本身。
    • 如果您使用逻辑备份文件,请配置数据转储并行性或转储标志。

      展开本部分可查看完整逻辑备份文件的步骤

      在选择生成转储文件的方式部分中,使用以下选项之一:

      1. 自动生成(推荐)

        建议选择此选项,因为 Database Migration Service 总是在创建并启动迁移作业后生成初始数据库转储文件。

        Database Migration Service 会使用此文件重现源数据库的原始对象定义和表数据,以便将这些信息迁移到目标 Cloud SQL 数据库实例中。

        如果您使用自动生成的转储,请在配置数据转储操作部分中选择 Database Migration Service 应执行的操作类型:

        • 数据转储并行处理:使用高性能并行处理选项,在迁移到 MySQL 5.7 或 8 版时可用。

          数据并行化的速度与源数据库上产生的负载量有关:

          • 最佳(推荐):在源数据库上实现平衡的性能和最佳负载。
          • 最大:提供最高的转储速度,但可能会导致源数据库负载增加。
          • 最低:占用源数据库上最少的计算资源,但可能会降低转储吞吐量。
        • 转储标志:此选项与数据转储并行处理互斥。 使用此设置可直接为用于创建转储文件的 mysqldump 实用程序配置标志。

          如需添加标志,请执行以下操作:

          1. 点击添加标志。
          2. 选择以下某个标志:

            • add-locks: 此标志会使用 LOCK TABLES 和 UNLOCK TABLES 语句将转储文件中包含的每个表括起来。这样一来,当转储文件加载到目标实例中时,插入速度会更快。
            • ignore-error: 使用此标志可输入以逗号分隔的错误编号列表。这些数字表示 mysqldump 实用程序将忽略的错误。
            • max-allowed-packet: 使用此标志可设置 MySQL 客户端与源 MySQL 数据库之间通信的缓冲区最大大小。 缓冲区的默认大小为 24 MB;大小上限为 1 GB。
          3. 点击完成。
          4. 针对您要添加的每个标志,重复上述步骤。

          如需移除标记,请点击包含相应标记的行右侧的回收站图标。

      2. 自行提供

        此选项不推荐,因为默认情况下,Database Migration Service 会在迁移作业运行期间执行初始转储。

        如果您想使用自己的转储文件,请选择自行提供,点击浏览,选择您的文件(如果您使用多个文件,请选择整个 Cloud Storage 文件夹),然后点击选择。

        确保转储是在过去 24 小时内生成的,并且符合转储要求。

  5. 点击保存并继续。

选择目标 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. 在测试并创建迁移作业页面上,点击测试作业。

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

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

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

    您的迁移正在进行中。启动迁移作业时,Database Migration Service 会开始完整转储,并短暂锁定源数据库。 如果您的来源位于 Amazon RDS 或 Amazon Aurora 中,则 Database Migration Service 还需要在迁移开始时停止写入片刻(大约不到一分钟)。如需了解详情,请参阅已知限制。

  3. 继续查看迁移作业。

使用 Google Cloud CLI 创建迁移作业

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

创建目标连接配置文件

通过运行 gcloud database-migration connection-profiles create 命令,为现有目标实例创建目标连接配置文件:

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

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

  • 将 CONNECTION_PROFILE_ID 替换为连接配置文件的机器可读标识符。
  • 将 REGION 替换为您要在其中保存连接配置文件的区域的标识符。
  • 将 DESTINATION_INSTANCE_ID 替换为目标实例的实例标识符。
  • (可选)将 CONNECTION_PROFILE_NAME 替换为连接配置文件的直观易懂的名称。此值会显示在 Google Cloud 控制台中。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud database-migration connection-profiles \
create mysql CONNECTION_PROFILE_ID \
  --no-async \
  --cloudsql-instance=DESTINATION_INSTANCE_ID \
  --region=REGION \
  --display-name=CONNECTION_PROFILE_NAME

Windows (PowerShell)

gcloud database-migration connection-profiles `
create mysql CONNECTION_PROFILE_ID `
  --no-async `
  --cloudsql-instance=DESTINATION_INSTANCE_ID `
  --region=REGION `
  --display-name=CONNECTION_PROFILE_NAME

Windows (cmd.exe)

gcloud database-migration connection-profiles ^
create mysql CONNECTION_PROFILE_ID ^
  --no-async ^
  --cloudsql-instance=DESTINATION_INSTANCE_ID ^
  --region=REGION ^
  --display-name=CONNECTION_PROFILE_NAME

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

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]

创建迁移作业

此示例使用可选的 --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= \

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= `

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= ^

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

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]

降级目标数据库

Database Migration Service 要求目标数据库实例在迁移期间充当读取副本。在开始迁移作业之前,请运行 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

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

管理迁移作业

此时,您的迁移作业已配置完毕并连接到目标数据库实例。您可以使用 verify、start、stop、restart 和 resume 操作来管理它。

验证迁移作业

我们建议您先运行 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

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

开始迁移作业

通过运行 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

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

提升迁移作业

迁移达到变更数据捕获 (CDC) 阶段后,您可以将目标数据库实例从只读副本提升为独立实例。 运行 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

结果

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

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
如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态: