您可以为任何 Cloud Spanner 数据库创建备份。这些备份完整,因为它们包含备份 version_time
中数据库的所有数据(包括架构和二级索引)。对 version_time
之后的数据或架构所做的任何修改都不会包含在备份中。备份包括使用 ALTER DATABASE SET OPTIONS
命令设置的所有数据库选项,但不包括 Identity and Access Management (IAM) 政策。创建备份时,备份会与其源数据库位于同一实例、区域和项目中。
您可以通过以下方式创建备份:
- 在 Google Cloud Console 中
- 使用 Google Cloud CLI
- 使用客户端库
- 使用 REST 或 RPC API
如需简要了解备份和恢复,请参阅关于备份和恢复。
如何创建备份
创建备份时,您必须指定源数据库、备份资源的名称以及失效日期(备份创建后最多 1 年)。您还可以选择指定 version_time
,以便将数据库备份到较早的时间点。version_time
字段通常用于同步多个数据库的备份,或使用时间点恢复来恢复数据。如果未指定 version_time
,则将其设置为备份的 create_time
。系统会创建备份资源和一个长时间运行的备份操作,以跟踪备份进度。新创建的备份与其源数据库位于同一实例、区域和项目中。
为了确保备份的外部一致性,Spanner 会将数据库的内容固定为 create_time
。这样可以防止垃圾收集系统在备份操作执行期间移除相关数据值。然后,实例中的每个读写可用区都会开始并行复制数据。如果任何可用区暂时不可用,则只有在该可用区恢复在线并完成之后,备份才能完成。操作完成后即可恢复备份。对于多区域实例,所有备份的所有读写区域都必须完成备份副本,才能将备份标记为可恢复。
备份还包含数据库变更流的架构,但不包含任何现有更改记录。变更流数据旨在与其所描述的更改近乎同步地进行流式传输和消耗。因此,Spanner 会从备份中排除这些数据。
加密
Spanner 备份(如数据库)由 Google 管理的加密或客户管理的加密进行加密。默认情况下,备份使用的加密配置与其数据库相同,但您可以通过在创建备份时指定不同的加密配置来替换此行为。如果备份启用了 CMEK,则系统会在备份创建时使用 KMS 密钥的主要版本对其进行加密。创建备份后,即使 KMS 密钥已轮替,其密钥和密钥版本也无法修改。如需了解详情,请参阅创建启用 CMEK 的备份。
资源层次结构
备份是 Spanner 中的资源。每个备份资源与其源数据库在资源层次结构中属于同一个实例,并且资源路径格式为 projects/<project>/instances/<instance>/backups/<backup>
。即使源数据库被删除,备份也仍然存在,但不能超过其父实例的存在时间。为防止意外删除备份,如果存在备份,则无法删除 Spanner 实例。如果要删除实例,我们建议您先删除备份,再导出已恢复的数据库,然后再删除备份和实例。
备份时间和性能
执行备份时,Spanner 会创建备份作业,以将数据从数据库直接复制到备份存储空间,并根据数据库的大小调整此作业的大小。此备份作业不使用分配给数据库实例的 CPU 资源,因此不会影响实例的性能。此外,数据库实例上的计算负载不会影响备份操作的速度。如需跟踪备份操作的进度和完成情况,请参阅显示备份进度。
一般来说,大多数备份需要 1-4 个小时。某些备份可能会因规模较大或存在资源内部队列而需要更长时间。如果在没有其他因素发生变化的情况下备份时间比平时更长,则可能是因为在可用区安排备份任务时出现延迟。此过程最多可能需要 30 分钟才能完成。我们建议您不要取消并重启备份,因为新的备份操作很可能会出现相同的时间安排延迟。
访问控制 (IAM)
spanner.backupAdmin
和 spanner.backupWriter
角色为您提供了创建备份的权限。使用上述任一角色,您都可以对实例调用创建备份请求。如需了解详情,请参阅使用 IAM 进行访问权限控制。
价格
您需要根据备份单位的存储空间用量来计费。创建备份操作完成后,系统会开始计费,并持续到备份删除完成为止。已完成的备份至少需要 24 小时。如果您创建备份,但在完成一分钟后删除,则仍需支付 24 小时的费用。
后续步骤
详细了解备份和恢复。
了解如何使用 Google Cloud Console 处理备份。
了解如何使用 Google Cloud CLI 处理备份。
了解如何使用客户端库处理备份。