本页面介绍了如何将数据库迁移到直接在 Cloud SQL 中创建的预先存在的 Cloud SQL for PostgreSQL 实例。
如果您的目标实例由其他团队管理,或者您需要在 Database Migration Service 之外创建实例(例如,如果您使用 Terraform、需要特定的自定义标志或需要高级网络拓扑),则此路径非常有用。如果您的迁移有不同的要求,请考虑遵循不同的迁移流程。如需了解详情,请参阅 开始进行 PostgreSQL 迁移。
概括来讲,迁移过程包含以下步骤:
- 配置源数据库,以允许 Database Migration Service 将数据移动到新数据库。
- 设置与源 PostgreSQL 实例的网络连接。
- 准备和配置现有 Cloud SQL 目标实例。
- 创建来源连接配置文件和迁移作业。
- 启动和监控迁移作业。
- 提升迁移作业,并让应用改用新数据库。
费用
在本文档中,您将使用Google Cloud的以下收费组件:
- Cloud SQL(请参阅 Cloud SQL 价格。)
- 如果用于存储客户管理的加密密钥 (CMEK):Cloud Storage(请参阅 Cloud Storage 价格)。
如需根据您的预计使用量来估算费用,请使用价格计算器。
准备工作
- 验证此迁移路径是否可以完全支持您的场景。 请参阅以下页面:
- 考虑要在哪个区域创建目标数据库。 Database Migration Service 是一款完全区域性的产品,这意味着与迁移相关的所有实体(源和目标连接配置文件、迁移作业、目标数据库、转换工作区)都必须保存在单个区域中。
- 在 Google Cloud 控制台的项目选择器页面上,选择或 创建 Google Cloud 项目。
- 启用 Database Migration Service API 和 Cloud SQL Admin API。
所需的角色
如需获得使用 Database Migration Service 执行同构 PostgreSQL 迁移所需的权限,请让管理员向您授予项目的所需 IAM 角色:
-
Database Migration Admin (
roles/datamigration.admin) -
Cloud SQL Editor (
roles/cloudsql.editor) - 如果您需要在 Database Migration Service 之外创建或配置目标实例,则还需要
Cloud SQL Admin (
roles/cloudsql.admin) -
Cloud SQL Studio User (
roles/cloudsql.studioUser)
如需详细了解如何授予角色,请参阅 Identity and Access Management 文档中的 管理访问权限。
这些预定义角色包含使用 Database Migration Service 执行同构 PostgreSQL 迁移所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需使用 Database Migration Service 执行同构 PostgreSQL 迁移,您需要拥有以下权限:
datamigration.*cloudsql.instances.createcloudsql.instances.getcloudsql.instances.listcloudsql.instances.updatecloudsql.instances.deletecloudsql.operations.getcloudsql.users.listcloudsql.users.getcloudsql.users.createcloudsql.users.updatecloudsql.users.delete
准备源数据库
如需准备要迁移的源数据,请按以下步骤操作:
- 选择并配置来源网络连接方法。
- 配置源数据库实例。概括来讲,这包括以下步骤:
- 在源数据库和所有要迁移的数据库上安装
pglogicalPostgreSQL 扩展程序(2.2.1 版或更高版本)。 - 配置 PostgreSQL 参数:设置
wal_level = logical,并确保max_replication_slots、max_wal_senders和max_worker_processes的值足够大。 - 向迁移用户授予复制权限,并配置
pg_hba.conf以允许来自目标 Cloud SQL 实例的连接。
如需详细说明,请参阅 配置源数据库。
- 在源数据库和所有要迁移的数据库上安装
- 创建来源连接配置文件。
准备和配置目标实例
迁移到现有 Cloud SQL 实例(例如由其他团队预配或使用 Terraform 管理的实例)时,请确保该实例满足所有 Database Migration Service 前提条件,然后再创建迁移作业:
- 实例就绪情况和数据状态:
- 目标实例必须是处于
RUNNABLE状态的独立实例(而非副本)。 - 实例必须与迁移作业和连接配置文件位于同一 Google Cloud 区域。
- 该实例一次只能与一个活跃迁移作业相关联。
- 目标实例不得包含现有用户数据、用户定义的表或非系统数据库。 如果实例上存在现有用户数据,则迁移作业验证会失败。如需了解详情,请参阅 迁移到现有目标实例的限制。如有必要,请 从目标实例中清除现有数据。
- 目标实例必须是处于
- 数据库标志配置:在目标 Cloud SQL for PostgreSQL 实例上启用
cloudsql.enable_pglogical标志。逻辑复制需要此标志。如需详细了解如何设置标志,请参阅 配置数据库标志。 - 数据库用户凭据和权限:确保目标实例上存在所需的管理数据库用户账号(例如默认
postgres用户或具有cloudsqlsuperuser角色的专用迁移用户),以便管理数据库和角色。您可以使用标准psql命令或通过 Google Cloud 控制台创建和管理数据库用户。如需了解详情,请参阅 Cloud SQL 文档中的 管理用户。 - 网络连接要求:根据您选择的连接方法,验证目标实例的网络是否已正确配置为与源数据库通信:
- Private Service Connect:如果您的目标实例已启用 Private Service Connect,则必须配置 Private Service Connect 出站网络连接。请参阅 Cloud SQL 文档中的 Private Service Connect 出站连接。
- 虚拟私有云对等互连(专用服务访问通道 / 专用 IP):目标实例必须在与源数据库对等互连或路由到源数据库的虚拟私有云网络上启用专用 IP。请参阅 配置专用 IP。
- 公共 IP 许可清单:如果使用公共 IP 连接,请确保在目标实例上启用公共 IP,并在源防火墙中将实例传出 IP 地址(如果实例配置为高可用性,则包括主要和次要传出 IP)列入许可清单。 请参阅 为公共 IP 授权网络。
- 实例降级通知:
- 对于标准 PostgreSQL 迁移,Database Migration Service 会降级现有的独立目标实例,将其配置为源数据库的外部副本。在 Google Cloud 控制台中创建迁移作业时,您必须输入目标实例 ID 来确认此降级。
- 降级实例不会将 Cloud SQL for PostgreSQL 数据库置于只读模式,但您必须避免对参与迁移的表或数据库执行写入操作,以防止复制冲突。
- 自动备份、时间点恢复 (PITR) 和创建 Cloud SQL 读取副本的操作会暂停,直到您提升迁移作业。如需了解详情,请参阅 迁移到现有目标实例的限制。
- 如果您使用基础架构即代码(例如 Terraform)管理目标实例,Database Migration Service 会在迁移期间修改备份和恢复设置。如需了解如何处理 Terraform 配置偏移,请参阅 诊断问题。
创建并运行迁移作业
如需配置和运行迁移,请执行以下步骤:
- 可选:如果您想自行管理迁移作业的证书或加密密钥,请 准备必要的加密密钥。
-
为现有目标实例创建并运行迁移作业。
您可以使用 Database Migration Service 可观测性功能监控迁移进度以及目标实例的运行状况。请参阅 迁移作业指标。
完成迁移
当您决定将应用切换到新的 Cloud SQL for PostgreSQL 实例时,请按照以下步骤完成迁移:
- 可选: 设置级联读取副本。如果您想使用级联读取副本,可以在迁移作业进入 CDC 阶段时进行配置。
- 停止对源数据库执行的所有写入操作。您可以将其切换为只读模式,以保留操作功能。
- 提升迁移作业。
- 可选: 验证迁移数据的完整性。
- 如果您使用基础架构即代码(例如 Terraform)管理目标数据库,请在提升后重新应用配置,以协调 Database Migration Service 在迁移期间调整的所有设置。
后续步骤
详细了解 Google Cloud Cloud SQL for PostgreSQL 的功能。请参阅 Cloud SQL for PostgreSQL 的特性。