迁移到现有目标实例时,对于标准迁移,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 会使用迁移作业将数据从源数据库实例迁移到目标数据库实例。为现有目标实例创建迁移作业包括:
- 定义迁移作业的设置
- 定义来源设置并选择要迁移的数据库
- 选择现有目标数据库实例
- 将现有实例降级,以将其配置为源数据库的副本(仅限标准迁移)
- 在源数据库实例和目标数据库实例之间建立连接
- 测试迁移作业,以确保您为作业提供的连接信息有效
准备工作
在创建到现有目标数据库实例的迁移作业之前,请确保您:
- 验证此迁移类型是否可以支持您的场景。 例如,如果您要迁移到在 Database Migration Service 之外创建的数据库,则 Cloud SQL 目标实例必须为空或仅包含系统配置数据。如需了解详情,请参阅已知限制。
创建目标数据库实例。 请参阅 Cloud SQL 文档中的创建实例。
- 准备源数据库实例。请参阅以下页面:
如需创建到现有目标实例的迁移作业,请执行以下操作:
控制台
定义迁移作业的设置
- 在 Google Cloud 控制台中,前往迁移作业页面。
- 点击创建迁移作业。
系统会打开迁移作业配置向导页面。 此向导包含多个面板,可引导您完成每个配置步骤。
您可以随时点击保存并退出,暂停创建迁移作业。您在此时之前输入的所有数据都会保存在草稿迁移作业中。 您可以稍后完成迁移作业草稿。
- 在开始使用页面上,输入以下信息:
- 迁移作业名称
这是迁移作业的人类可读名称。此值会显示在 Google Cloud 控制台中。
- 迁移任务 ID
这是迁移作业的机器可读标识符。 您可以使用此值通过 Database Migration Service Google Cloud CLI 命令或 API 来处理迁移作业。
- 从源数据库引擎列表中,选择 PostgreSQL。
目标数据库引擎字段会自动填充,且无法更改。
- 选择您保存迁移作业的区域。
Database Migration Service 是一款完全区域性的产品,这意味着与迁移相关的所有实体(源和目标连接配置文件、迁移作业、目标数据库)都必须保存在单个区域中。根据需要数据的服务(例如 Compute Engine 实例、App Engine 应用及其他服务)的位置选择区域。选择目标区域后,此选择便无法更改。
- 指定迁移作业类型:一次性(仅快照)或持续(快照 + 持续更改)。
- 迁移作业名称
- 点击保存并继续。
指定有关来源连接配置文件的信息
在定义来源页面上,执行以下步骤:
- 从来源连接配置文件下拉菜单中,选择源数据库的连接配置文件。
- 在自定义数据转储配置部分中,点击显示数据转储配置。
数据转储并行速度与源数据库上的负载量有关:
- 最佳(推荐):提供平衡的性能和源数据库负载。
- 最大:提供最高的转储速度,但可能会导致源数据库负载增加。
- 最低:占用源数据库上最少的计算资源,但转储吞吐量可能较低。
如果您选择调整后的数据转储并行设置,请务必增加源数据库上的
max_replication_slots、max_wal_senders和max_worker_processes参数。 - 点击保存并继续。
选择目标 Cloud SQL 实例
- 从目标实例类型菜单中,选择现有实例。
- 在选择目标实例部分中,选择目标实例。
-
查看实例详情部分中的信息,然后点击选择并继续。
如需在标准迁移中迁移到现有目标数据库,Database Migration Service 会降级目标实例并将其配置为副本。 如需表明可以安全地执行降级,请在确认窗口中输入目标实例标识符。
- 点击确认并继续。
在源数据库实例和目标数据库实例之间建立连接
从连接方法下拉菜单中,选择一种网络连接方法。此方法定义了目标 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 遇到数据库名称冲突,则会在迁移前删除目标数据库中的冲突数据库。
- 从要迁移的数据库列表中,选择以下选项之一:
- 所有数据库:选择源中存在的所有数据库。
- 特定数据库:可让您从来源中存在的所有数据库中选择特定数据库。
如果您想迁移特定数据库,可以过滤显示的列表,然后选择您希望 Database Migration Service 迁移到目标位置的数据库。
如果未显示列表,而是显示数据库发现错误,请点击重新加载。如果数据库发现失败,作业会迁移所有数据库。您可以继续创建迁移作业,稍后再修正连接错误。
- 点击保存并继续。
测试、创建和运行迁移作业
在最后一步中,查看迁移作业设置、来源、目标和连接方法的摘要,然后测试迁移作业设置的有效性。如果遇到任何问题,您可以修改迁移作业的设置。并非所有设置都可以修改。
-
在测试并创建迁移作业页面上,点击测试作业。
如果测试失败,您可以在流的适当部分解决问题,然后返回重新测试。如需了解如何排查迁移作业测试失败的问题,请参阅诊断 PostgreSQL 问题。
-
迁移作业测试完成后,点击创建并启动作业以创建迁移作业并立即启动,或点击创建作业以创建迁移作业但不立即启动。
如果作业在创建时未启动,则可以从迁移作业页面点击启动来启动该作业。无论迁移作业何时开始,您的组织都需要为目标实例的存在付费。
您的迁移正在进行中。启动迁移作业后,Database Migration Service 会开始初始完整转储和复制。如需了解详情,请参阅已知限制。
- 继续查看迁移作业。
Google Cloud CLI
使用 Google Cloud CLI 迁移到现有实例时,您必须手动为目标实例创建连接配置文件。使用 Google Cloud 控制台时,您无需执行此操作,因为 Database Migration Service 会为您创建和移除目标连接配置文件。
创建目标连接配置文件。
通过运行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]
创建迁移作业。
以下示例展示了在源数据库和目标数据库之间使用专用 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]
降级目标数据库。
对于标准迁移,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
如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:
- 使用
gcloud database-migration migration-jobs describe命令查看迁移作业的状态。 - 将
gcloud database-migration operations describe与 OPERATION_ID 搭配使用,可查看操作本身的状态。
- 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。
可选:验证迁移作业。
此时,您的迁移作业已配置并连接到目标数据库实例。您可以使用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
如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:
- 将
gcloud database-migration migration-jobs describe命令与 MIGRATION_JOB_ID 搭配使用,可查看迁移作业的状态。 - 将
gcloud database-migration operations describe命令与 OPERATION_ID 搭配使用,可查看操作本身的状态。
- 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。
启动迁移作业。
通过运行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
如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:
- 将
gcloud database-migration migration-jobs describe命令与 MIGRATION_JOB_ID 搭配使用,可查看迁移作业的状态。 - 将
gcloud database-migration operations describe命令与 OPERATION_ID 搭配使用,可查看操作本身的状态。
- 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。
提升迁移作业。
迁移达到变更数据捕获 (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
如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:
- 将
gcloud database-migration migration-jobs describe命令与 MIGRATION_JOB_ID 搭配使用,可查看迁移作业的状态。 - 将
gcloud database-migration operations describe命令与 OPERATION_ID 搭配使用,可查看操作本身的状态。
- 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。