如何为Cloud SQL Postgres实例创建跨项目只读副本
Cloud SQL Postgres 跨项目只读副本创建方案
Cloud SQL 原生不支持直接点击创建跨项目只读副本,可通过以下两种成熟方案实现:
方案1:备份快照克隆(操作最简,适合一次性交付只读副本)
该方案基于Cloud SQL底层快照直接克隆,耗时远低于导出导入流程。
- 权限配置:将目标项目的Cloud SQL服务账号添加至源项目,授予
Cloud SQL Viewer和Cloud SQL Backup Viewer权限 - 进入源实例所在项目的Cloud SQL控制台,打开源实例的「备份」页,选择可用的手动/自动备份点,点击「创建克隆」
- 克隆配置页中,项目下拉选择目标项目,按需调整实例的CPU、内存、磁盘配置,要求PostgreSQL大版本与源实例完全一致
- 克隆完成后可将实例设置为全局只读:在Cloud SQL实例的「标志」配置中添加
default_transaction_read_only=on,重启后生效
方案2:逻辑复制同步(适合需要和源实例保持实时同步的场景)
该方案创建的副本会和源实例保持数据实时同步,延迟通常在秒级。
- 源实例配置:在源实例的「标志」配置中开启
cloudsql.logical_decoding,重启实例生效;为复制账号授予REPLICATION权限 - 权限配置:将源项目的Cloud SQL服务账号(格式为
p[源项目编号]@cloud-sql.iam.gserviceaccount.com)添加至目标项目,授予Cloud SQL Admin权限 - 在本地或Cloud Shell执行gcloud命令创建跨项目副本:
gcloud sql instances create [目标副本实例名] \ --project=[目标项目ID] \ --master-instance-name=projects/[源项目ID]/instances/[源实例名] \ --replica-type=READ_REPLICA \ --region=[目标实例区域] \ --database-version=[源实例PG版本,如POSTGRES_14]
- 初始化完成后可在副本实例执行
SELECT * FROM pg_stat_replication;验证复制状态和延迟
注意事项
- 两种方案均要求源实例和目标实例的PostgreSQL大版本完全一致,不支持跨版本创建
- 跨区域创建副本会产生跨区域网络流量费用,同区域跨项目无额外流量费用
- 方案2创建的实时副本删除前需要先提升为独立实例,避免操作对源实例产生影响
内容的提问来源于stack exchange,提问作者Prashant Kc
相关产品推荐
相关产品推荐

