创建备份

您可以为任何 Spanner 数据库创建备份。这些备份是完整的,因为它们包含位于备份 version_time 的数据库中的所有数据(包括架构和二级索引)。对 version_time 之后的数据或架构所做的任何修改都不会包含在备份中。备份包含使用 ALTER DATABASE SET OPTIONS 命令设置的所有数据库选项,但不包含 Identity and Access Management (IAM) 政策。创建备份时,备份与其源数据库位于同一实例、区域和项目中。

您可以通过以下方式创建备份:

如需简要了解备份和恢复,请参阅备份和恢复简介

创建备份的运作方式

创建备份时,您必须指定源数据库、备份资源的名称和到期日期(从备份创建之时算起,最长 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.backupAdminspanner.backupWriter 角色授予您创建备份的权限。借助上述任何一种角色,您都可以对实例调用创建备份请求。如需了解详情,请参阅使用 IAM 进行访问权限控制

价格

您需要根据备份每单位时间使用的存储空间量付费。创建备份操作完成后,系统会开始计费,直到备份被删除为止。完成的备份至少需要支付 24 小时的费用。如果您创建了备份,然后在备份完成后一分钟将其删除,那么您仍然需要支付 24 小时的费用。

后续步骤