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

使用 Database Migration Service 创建目标实例时,该实例会自动降级并作为只读副本运行。这意味着某些操作会受到限制。例如,如果您想在迁移过程中在新目标中创建用户,请使用 Google Cloud 控制台中的 Cloud SQL。如需了解详情,请参阅 Cloud SQL 文档中的管理用户。

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

  • 定义迁移作业的设置
  • 选择源数据库连接配置文件
  • 定义目标 Cloud SQL 数据库实例的设置并创建实例
  • 在源数据库实例和目标数据库实例之间建立连接
  • 测试迁移作业,以确保您为作业提供的连接信息有效

准备工作

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

  1. 验证此迁移类型是否支持您的方案。 如需了解详情,请参阅已知限制。
  2. 配置源数据库并建立网络连接。 创建迁移作业是完整迁移过程中的一个步骤。我们建议您按照分步迁移演示进行操作,并在到达迁移作业步骤时返回此过程。请参阅 迁移到新实例。

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

控制台

定义迁移作业的设置

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

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

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

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

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

      点击显示次要版本,查看所有次要版本。 详细了解 跨版本迁移支持。

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

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

    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 实例的机器类型。磁盘大小必须等于或大于源数据库的大小。详细了解 MySQL 机器类型。
  3. 对于 Cloud SQL for MySQL 企业 Plus 版:如果您想在目标数据库中使用数据缓存功能,请选中启用数据缓存复选框。

    数据缓存是一项可选功能,适用于 Cloud SQL for MySQL 企业 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 实例上的数据库标志与源数据库上的数据库标志相同。详细了解 MySQL 支持的数据库标志。
    3. 添加特定于 Cloud SQL 实例的任何 标签。

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

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

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

从连接方法下拉菜单中,选择一种网络连接方法。此方法定义了新创建的 Cloud SQL 实例将如何连接到源数据库。当前用于迁移到新实例的网络连接方法包括 IP 许可清单、反向 SSH 隧道、VPC 对等互连以及仅适用于 Cloud SQL for MySQL 来源的专用 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. 在测试并创建迁移作业页面上,点击测试作业。

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

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

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

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

  3. 继续查看迁移作业。

gcloud

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

    gcloud database-migration connection-profiles create cloudsql

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

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

    • 将 CONNECTION_PROFILE_ID 替换为连接配置文件的机器可读标识符。
    • 将 DATABASE_VERSION 替换为您要在目标实例中使用的 MySQL 版本。数据库版本以字符串形式指定,其中包含主要版本和次要版本。例如:MYSQL_8_0、MYSQL_8_0_32、MYSQL_8_0_36。

      如需查看所有可能的 MySQL 版本,请参阅 --database-version 标志参考。

    • (可选)EDITION 默认情况下,您使用 Google Cloud CLI 创建的新实例会使用 Cloud SQL for MySQL 企业 Plus 版。如果您计划使用 Cloud SQL for MySQL 企业 Plus 版,请确保您所在的区域支持该版本。请参阅 Cloud SQL for MySQL 企业 Plus 版区域支持。

      您可以使用 --edition 标志并搭配以下任一值来更改版本:

      • enterprise-plus 对于 Cloud SQL for MySQL 企业 Plus 版
      • enterprise 适用于 Cloud SQL for MySQL 企业版
    • 将 TIER 替换为您要使用的 Cloud SQL 机器类型的名称。 机器类型指定为遵循 Cloud SQL 惯例的字符串,例如 db-n1-standard-1、db-perf-optimized-N-2。 如需查看可用的机器类型及其标识符(用于 Google Cloud CLI)的完整列表,请参阅 Cloud SQL for MySQL 文档中的 机器类型。

      使用 Google Cloud CLI 创建的实例默认使用 Cloud SQL for MySQL 企业 Plus 版,该版本提供不同的机器类型。如果您想使用仅在 Cloud SQL for MySQL 企业版中可用的机器类型,请使用可选的 --edition=enterprise 标志来指定版本。

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

      默认情况下,您使用 Google Cloud CLI 创建的新实例会使用 Cloud SQL for MySQL 企业 Plus 版。如果您计划使用 Cloud SQL for MySQL 企业 Plus 版,请确保您的区域支持该版本。请参阅 Cloud SQL for MySQL 企业 Plus 版区域支持。 您可以使用可选的 --edition 标志更改版本。

    • (可选)CONNECTION_PROFILE_NAME,用于指定连接配置文件的直观易懂的名称。此值会显示在 Google Cloud 控制台中。
    • 网络配置

      默认情况下,您使用 Google Cloud CLI 创建的新实例会分配一个公共 IP 地址,并配置为使用公共 IP 连接。您可以使用其他连接方法。 如需了解详情,请参阅配置连接。

      如果您想使用公共 IP 连接,则无需使用其他标志。如果您想通过 VPC 网络对等互连或反向 SSH 隧道使用专用 IP 连接,请确保您满足以下额外的网络要求,以启用专用 IP 连接,并在命令中添加额外的标志。

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

      如果您想使用专用 IP 连接(通过 VPC 网络对等互连或通过 Compute Engine 虚拟机上的反向 SSH 隧道),请添加以下额外标志:

      • --no-enable-ip-v4:(可选)不为目标实例分配公共 IP 地址。您可以为目标实例同时分配公共 IP 地址和专用 IP 地址,但如果您使用专用 IP 连接,则可能不需要公共 IP 地址。
      • --private-network:如需为目标实例分配专用 IP 地址,请指定您希望分配专用 IP 地址的虚拟私有云的名称。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration connection-profiles \
    create mysql CONNECTION_PROFILE_ID \
      --no-async \
      --region=REGION \
      --database-version=DATABASE_VERSION \
      --tier=TIER \
      --display-name=CONNECTION_PROFILE_NAME

    Windows (PowerShell)

    gcloud database-migration connection-profiles `
    create mysql CONNECTION_PROFILE_ID `
      --no-async `
      --region=REGION `
      --database-version=DATABASE_VERSION `
      --tier=TIER `
      --display-name=CONNECTION_PROFILE_NAME

    Windows (cmd.exe)

    gcloud database-migration connection-profiles ^
    create mysql CONNECTION_PROFILE_ID ^
      --no-async ^
      --region=REGION ^
      --database-version=DATABASE_VERSION ^
      --tier=TIER ^
      --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]
    
  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=MIGRATION_JOB_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=MIGRATION_JOB_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=MIGRATION_JOB_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]