使用 Database Migration Service 创建目标实例时,该实例不会降级,也不会以只读模式运行,但在迁移过程中执行某些操作可能会导致迁移错误。在迁移到新的目标实例时,请注意以下操作注意事项:
- 避免对迁移数据执行写入操作:请勿在目标实例中对迁移中包含的表或数据库执行写入操作(例如
INSERT、UPDATE、DELETE或 DDL 架构更改)。此类操作可能会导致与来自源的数据发生复制冲突。 - 管理数据库用户:您可以随时使用标准
psql命令或通过 Google Cloud 控制台中的 Cloud SQL 创建和管理数据库用户。如需了解详情,请参阅 Cloud SQL 文档中的管理用户。 - 备份和读取副本:在持续复制期间,自动备份和时间点恢复 (PITR) 会暂停,并且在迁移作业提升之前,您无法从目标实例创建 Cloud SQL 读取副本。
如需了解详情,请参阅已知限制。
创建迁移作业包括:
- 定义迁移作业的设置。
- 定义来源设置并选择要迁移的数据库。
- 定义目标 Cloud SQL 数据库实例的设置并创建实例。
- 在源数据库实例和目标数据库实例之间建立连接。
- 测试迁移作业,以确保您为作业提供的连接信息有效。
如需创建到新的目标实例的迁移作业,请执行以下操作:
控制台
定义迁移作业的设置
- 在 Google Cloud 控制台中,前往迁移作业页面。
- 点击创建迁移作业。
系统会打开迁移作业配置向导页面。 此向导包含多个面板,可引导您完成每个配置步骤。
您可以随时点击保存并退出,暂停创建迁移作业。您在保存之前输入的所有数据都会保存在迁移作业草稿中。 您可以稍后完成迁移作业草稿。
- 在开始使用页面上,输入以下信息:
- 迁移作业名称
这是迁移作业的人类可读名称。此值会显示在 Google Cloud 控制台中。
- 迁移任务 ID
这是迁移作业的机器可读标识符。 您可以使用此值通过 Database Migration Service Google Cloud CLI 命令或 API 来处理迁移作业。
- 从源数据库引擎列表中,选择 PostgreSQL。
目标数据库引擎字段会自动填充 Cloud SQL for PostgreSQL,且无法更改。
- 选择您保存迁移作业的区域。
Database Migration Service 是一款完全区域性的产品,这意味着与迁移相关的所有实体(源和目标连接配置文件、迁移作业、目标数据库)都必须保存在单个区域中。根据需要数据的服务(例如 Compute Engine 实例或 App Engine 应用及其他服务)的位置选择区域。选择目标区域后,此选择便无法更改。
- 指定迁移作业类型:一次性或持续。
- 查看为您的环境生成的前提条件。请确保您的源数据库配置正确。如需了解详情,请参阅配置源数据库。
- 迁移作业名称
- 点击保存并继续。
指定有关来源连接配置文件的信息
在定义来源页面上,执行以下步骤:
- 从来源连接配置文件下拉菜单中,选择源数据库的连接配置文件(或点击创建连接配置文件,请参阅创建来源连接配置文件)。
- 在自定义并行处理配置部分中,点击显示并行处理配置。
数据转储并行处理的速度与源数据库上的负载量有关。您可以使用以下设置:
- 最佳(推荐):提供平衡的性能和源数据库负载。
- 最大:提供最高的转储速度,但可能会导致源数据库负载增加。
- 最低:占用源数据库上最少的计算资源,但转储吞吐量可能较低。
如果您选择调整后的并行设置,请务必增加源数据库上的
max_replication_slots、max_wal_senders和max_worker_processes参数。您可以在迁移作业创建结束时运行迁移作业测试,以验证配置。 - 点击保存并继续。
配置并创建 Cloud SQL 目标实例
- 在定义目标数据库页面上,从目标实例类型下拉菜单中选择新实例。定义所有相关设置:
- 在目标实例 ID 字段中,提供 Cloud SQL 实例的标识符,或使用自动生成的标识符。
请勿在标识符中包含敏感信息或个人身份信息。无需在实例名称中包含项目 ID。此操作将在适当的位置(例如在日志文件中)自动完成。
- 在密码字段中,为目标 Cloud SQL 实例提供字母数字密码。这是实例中
postgres管理员账号的密码。您可以手动输入密码,也可以点击生成以让 Database Migration Service 自动为您创建密码。
- 从数据库版本下拉菜单中,选择目标实例的数据库版本。
详细了解跨版本迁移支持。
- 为目标实例选择 Cloud SQL for PostgreSQL 版本。
有两个选项可供选择:Cloud SQL for PostgreSQL 企业版和 Cloud SQL for PostgreSQL 企业 Plus 版。
Cloud SQL for PostgreSQL 版本具有不同的功能集、可用机器类型和价格。请务必参阅 Cloud SQL 文档,选择适合您需求的版本。如需了解详情,请参阅 Cloud SQL for PostgreSQL 版本简介。
- 区域菜单会显示您在开始页面上选择的区域。
如果要将实例配置为高可用性,请选择多个可用区(高可用性)。您可以同时选择主要可用区和次要可用区。 在创建实例期间使用次要可用区时,适用以下条件:
- 主要可用区默认为任意,次要可用区默认为任意(不同于主要可用区)。
- 如果同时指定主要和次要可用区,则它们必须是不同的可用区。
- 在连接部分中,选择是为目标实例添加公共 IP 地址还是专用 IP 地址。
您可以将实例配置为同时具有这两种类型的 IP 地址,但迁移至少需要一种类型。选择以下选项之一:
- 如果您想使用 VPC 对等互连或反向 SSH 隧道进行迁移,请选择专用 IP。
如需启用专用 IP 连接,请确保您满足所有其他网络要求。
展开此部分可查看完整的专用 IP 要求。
- Service Networking API 已启用。您可以使用 Google Cloud 控制台启用 Service Networking API。
- 您拥有
servicenetworking.services.addPeeringIAM 权限。 - 您已为项目配置专用服务访问通道,为此您需要拥有
compute.networkAdminIAM 角色。 - 您的项目中至少有一个非旧版 VPC 网络或 /vpc/docs/shared-vpc 网络。
- 如果您使用的是共享 VPC 网络,则还需要执行以下操作:
- 为宿主项目启用 Service Networking API。
- 将您的用户添加到宿主项目中。
- 在宿主项目中为您的用户授予 compute.networkAdmin IAM 角色。
- 选择要建立对等互连的关联 VPC 网络。如果您计划使用 VPC 对等互连连接到迁移来源,请选择实例所在的 VPC。
- 如果从未为所选 VPC 配置过代管式服务网络,您可以选择一个 IP 范围并点击连接,也可以使用自动选择的 IP 范围并点击分配并连接。
- 如果您想通过互联网使用 IP 许可清单进行迁移,请选择公共 IP。
(可选)在公共 IP 下,点击已获授权的网络字段,然后授权网络或代理连接到 Cloud SQL 实例。网络仅通过您提供的地址获得授权。请参阅 Cloud SQL 文档中的配置公共 IP。
您将在后续步骤中配置迁移作业连接性。如需详细了解可用的网络方法,请参阅配置连接性。
- 如果您想使用 VPC 对等互连或反向 SSH 隧道进行迁移,请选择专用 IP。
- 在目标实例 ID 字段中,提供 Cloud SQL 实例的标识符,或使用自动生成的标识符。
- 选择 Cloud SQL 实例的机器类型。详细了解 PostgreSQL 机器类型。
- 对于 Cloud SQL for PostgreSQL 企业 Plus 版:如果您想在目标数据库中使用数据缓存功能,请选中启用数据缓存复选框。
数据缓存是一项可选功能,适用于 Cloud SQL for PostgreSQL 企业 Plus 版实例,可为目标数据库添加高速本地固态硬盘。 此功能可能会给 Cloud SQL 带来额外费用。 如需详细了解数据缓存,请参阅 Cloud SQL 文档中的数据缓存概览。
- 指定 Cloud SQL 实例的存储类型。您可以选择固态硬盘 (SSD) 或硬盘驱动器 (HDD)。
- 指定 Cloud SQL 实例的存储容量(以 GB 为单位)。
确保实例有足够的存储容量来处理源数据库中的数据。您可以随时增加此容量,但不能减少。
(可选)为目标实例配置数据加密选项或资源标签。
展开此部分可查看可选步骤。
点击显示可选配置,然后:
指定是否要管理从源迁移到目标的数据的加密。默认情况下,您的数据使用由 Google Cloud管理的密钥进行加密。如果您希望管理加密,可以使用由客户管理的加密密钥 (CMEK)。为此,请执行以下操作:
- 选中使用客户管理的加密密钥 (CMEK) 复选框。
- 从选择客户管理的密钥菜单中,选择您的 CMEK。
如果您没有看到密钥,请点击输入密钥资源名称以提供要使用的密钥的资源名称。密钥资源名称示例:
projects/my-project-name/locations/my-location/keyRings/my-keyring/cryptoKeys/my-key。- 添加要应用于数据库服务器的所有必要标志。 如果可能,请确保所创建的目标 Cloud SQL 实例上的数据库标志与源数据库上的数据库标志相同。详细了解 PostgreSQL 支持的数据库标志。
- 添加特定于 Cloud SQL 实例的所有标签。
标签可帮助您整理实例。例如,您可以按成本中心或环境来整理标签。您的账单中也会包含标签,便于您按标签查看费用分布情况。
- 点击创建目标位置并继续。 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 遇到数据库名称冲突,则会在迁移前删除目标数据库中的冲突数据库。
- 从要迁移的数据库列表中,选择以下选项之一:
- 所有数据库:选择源中存在的所有数据库。
- 特定数据库:可让您从来源中存在的所有数据库中选择特定数据库。
如果您想迁移特定数据库,可以过滤显示的列表,然后选择您希望 Database Migration Service 迁移到目标位置的数据库。
如果未显示列表,而是显示数据库发现错误,请点击重新加载。如果数据库发现失败,作业会迁移所有数据库。您可以继续创建迁移作业,稍后再修正连接错误。
- 点击保存并继续。
测试、创建和运行迁移作业
在最后一步中,查看迁移作业设置、来源、目标和连接性的摘要,然后测试迁移作业设置的有效性。如果遇到任何问题,您可以修改迁移作业的设置。并非所有设置都可以修改。
-
在测试并创建迁移作业页面上,点击测试作业。
如果测试失败,您可以在流的适当部分解决问题,然后返回重新测试。如需了解如何排查迁移作业测试失败的问题,请参阅诊断 PostgreSQL 问题。
-
迁移作业测试完成后,点击创建并启动作业以创建迁移作业并立即启动,或点击创建作业以创建迁移作业但不立即启动。
如果作业在创建时未启动,则可以从迁移作业页面点击启动来启动该作业。无论迁移作业何时开始,您的组织都需要为目标实例的存在付费。
您的迁移正在进行中。启动迁移作业后,Database Migration Service 会开始初始完整转储和复制。如需了解详情,请参阅已知限制。
- 继续查看迁移作业。
Google Cloud CLI
创建目标连接配置文件。
使用 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]
创建迁移作业。
如果您使用 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]