是否可将Google Cloud Bigtable表备份恢复至另一GCP项目的实例
目前最优的实现方式是直接使用Cloud Bigtable原生支持的跨项目备份恢复功能,该方案不需要中转存储、数据一致性有官方保障、操作成本最低,是跨项目恢复场景的首选。
前置要求
- 项目A中待恢复的Bigtable备份状态为
READY,表级备份、实例级备份均支持恢复 - 执行操作的账号同时具备两个项目的对应权限:
- 项目A侧:
roles/bigtable.admin权限,或细粒度的bigtable.backups.get、bigtable.backups.restore权限 - 项目B侧:
roles/bigtable.admin权限,或细粒度的bigtable.instances.update、bigtable.tables.create权限
- 项目A侧:
- 项目B的目标Bigtable实例*存储类型(SSD/HDD)*必须和源备份的存储类型一致,实例所在区域也需要和备份存储的区域完全匹配
- 项目B的目标Bigtable实例中不存在和待恢复表同名的表,原生恢复不支持覆盖已有表
操作步骤
1. 确认源备份信息
在本地或Cloud Shell中运行gcloud命令,获取项目A中待恢复备份的完整资源ID:gcloud bigtable backups list --project [项目A的项目ID] --instance [项目A的Bigtable源实例名]
记录返回结果中目标备份的NAME字段,格式为projects/[项目AID]/instances/[源实例名]/clusters/[源集群名]/backups/[备份名]
2. 执行跨项目恢复
运行恢复命令,指定项目B的目标实例和恢复后的表名:gcloud bigtable backups restore [上一步记录的备份完整资源ID] --project [项目B的项目ID] --instance [项目B的Bigtable目标实例名] --table [恢复后的目标表名]
3. 校验恢复结果
恢复完成后运行命令查看目标表状态:gcloud bigtable tables list --project [项目B的项目ID] --instance [项目B的Bigtable目标实例名]
确认表状态为READY后,可抽样校验行数据、表结构与源备份一致即可。
跨区域场景备选方案
如果源备份所在区域和项目B的Bigtable实例区域不匹配,无法使用原生跨项目恢复能力,可按以下流程操作:
- 将项目A的Bigtable备份导出到同区域的Cloud Storage存储桶
- 为项目B的操作账号授予该Cloud Storage存储桶的读权限
- 在项目B的Bigtable实例中,从Cloud Storage存储桶导入数据创建新表
该方案需要额外支付Cloud Storage的存储、跨区域流量费用,恢复耗时远高于原生恢复方案,仅适用于跨区域恢复场景。
内容的提问来源于stack exchange,提问作者Arun A

