本文档简要介绍了 Spanner 备份和备份时间表。
借助 Spanner,您可以按需创建数据库的完整备份,也可以使用备份时间表创建完整备份或增量备份。完整备份会存储数据库的全部数据,而增量备份仅包含自上次备份以来发生更改的数据。
当运算符或应用错误导致逻辑数据损坏时,您可以恢复备份。
备份具有高可用性,经过加密,可在创建后保留长达一年的时间。创建备份后,备份会与其源数据库位于同一实例、区域和项目中。如果您出于合规性或业务连续性原因需要在其他区域或项目中恢复备份,可以将备份复制到其他区域或项目中的实例。
每个备份都有关联的 createTime
和 versionTime
。createTime
是 Spanner 开始创建备份时的时间戳。versionTime
是数据库内容在备份中捕获的时间戳。备份包含 versionTime
时刻数据库的一致视图。
对于按需备份,createTime
和 versionTime
默认相同。如有需要,您可以在创建按需备份时指定较早的 versionTime
(前提是该版本在数据库的版本保留期限内)。
对于安排的备份,versionTime
是您在创建备份时间表时选择的时间。Spanner 会在 versionTime
后的 4 小时内开始创建备份,因此 createTime
会在此 4 小时内。这与按需备份不同,在按需备份中,Spanner 会在收到请求时开始创建备份。
例如,假设您创建了一个备份时间表,其频率为 0 7 * * * UTC
,即每天世界协调时间 (UTC) 上午 7:00 进行一次备份。这意味着,对于每次备份,versionTime
均设置为世界协调时间 (UTC) 凌晨 7:00,createTime
则是世界协调时间凌晨 7:00 到上午 11:00 之间的 4 小时时段内的某个时间戳。
如需详细了解如何使用 API 使用 createTime
和 versionTime
,请参阅 Backup API 参考文档。
主要特性
数据一致性:Spanner 数据库的备份在
versionTime
备份时具有事务一致性和外部一致性。复制:备份与源数据库位于同一实例中,并在同一地理位置进行复制。对于区域实例,三个读写可用区各自都存储有备份。对于双区域实例和多区域实例,备份存储在包含读写副本或只读副本的所有可用区中。如果您需要将数据库的备份存储在其他区域或项目中,可以将已完成的备份从源实例复制到位于其他区域或项目中的目标实例。如需了解详情,请参阅复制备份。
自动到期:所有备份都有一个用户指定的失效日期,用于确定何时自动删除该备份。Spanner 会以异步方式删除失效的备份,因此备份失效和实际删除之间可能会有延迟。
创建备份
创建备份后,备份会与其源数据库位于同一实例、区域和项目中。
备份包含备份 versionTime
时数据库中的以下信息:
- 完整备份包含所有数据。增量备份仅包含自上次备份以来发生了更改的数据。
- 架构信息,包括表名称、字段、数据类型、次级索引、更改流和这些实体之间的关系。
- 使用
ALTER DATABASE SET OPTIONS
命令设置的所有数据库选项。
Spanner 备份不包含以下信息:
versionTime
之后对数据或架构进行的任何修改。- Identity and Access Management (IAM) 政策。
- 变更数据流数据记录。虽然变更数据流架构会被存储,但变更数据流数据应与其描述的更改几乎同时流式传输和使用。
为帮助确保备份的外部一致性,Spanner 会在 versionTime
时固定数据库的内容。这样可以防止垃圾回收系统在备份操作期间移除相关数据值。然后,实例中的每个读写和只读可用区开始并行复制数据。如果任何可用区暂时不可用,则直到该可用区恢复在线后,备份才会完成。备份在操作完成后立即恢复。对于多区域实例,所有区域中的所有读写和只读可用区都必须完成其备份副本,然后才能将备份标记为可恢复。
备份时间表
借助 Spanner,您可以为数据库安排完整备份或增量备份。增量备份仅包含自上次备份以来发生更改的数据,而完整备份会存储数据库的全部内容。您可以为 Spanner 指定备份时间表类型(完整备份或增量备份)和频率,以便其创建备份。
完整备份时间表可以每 12 小时或更长时间创建一次备份。增量备份时间表可以每 4 小时或更长时间创建一次备份。
Spanner 通过备份时间表为您的数据库提供增量备份。您无法按需创建增量备份。
备份创建会在所安排时间的四小时内开始。每个数据库最多可以有 4 个备份时间表。
增量备份
增量备份会在完整备份之间形成链。增量备份时间表创建的第一个备份是完整备份。在链中创建的连续备份是增量备份,每个备份仅包含自链中上一个备份以来发生更改的数据。
除了初始完整备份之外,Spanner 还允许每个链最多有 13 个增量备份。链由相应的 incrementalBackupChainId
值标识。当链达到最大长度时,Spanner 会创建一个新链,从初始完整备份开始。
在某些情况下,Spanner 可能会在达到最大链长之前创建新链。以下是一些场景:
- 最早的完整备份已超过 28 天。
- 系统会删除链中最新的备份。
- 增量备份时间表已修改。
以下是一些有助于您决定是否使用增量备份的因素:
加密:增量备份仅支持使用Google-owned and Google-managed encryption keys 进行加密,即使数据库是使用客户管理的加密密钥 (CMEK) 加密的也是如此。
恢复:恢复增量备份可能比恢复包含相同数据的完整备份花费更长时间。
删除:如果您删除了某个链中的备份或该备份过期,Spanner 可能仍会保留该备份,以支持链中的较新备份(如果有)。Spanner 需要链中的所有旧备份才能恢复增量备份。如需删除备份链中的所有数据(包括已过期或已删除的备份中的数据),请删除链中的所有备份。
保留:每个备份时间表都有以下术语,提供有关该时间表的信息:
creation_interval
:表示备份时间表的指定时间表频率。retention_duration
:表示按时间表创建的备份的保留期限。对于给定链,如果最早的完整备份需要保留以支持链中的较新备份,则会保留到其原始到期日期之后。完整备份的总保留时长最多为以下值中的较小者:retention_duration
+ 28 天retention_duration
+ (creation_interval
*14)
备份副本:当您复制增量备份时,Spanner 会复制备份链,从初始完整备份开始,到您要复制的特定增量备份结束。Spanner 会根据您使用的总存储空间向您收费。
如需详细了解如何创建增量备份,请参阅创建和管理备份时间表。
默认备份时间表
创建新的 Spanner 实例时,您可以指定是否要让 Spanner 为实例中的每个新数据库创建默认备份时间表。默认备份时间表会每 24 小时创建一次完整备份。这些备份的保留期限为 7 天。默认备份时间表创建完成后,您可以修改或删除。
系统会自动为所有新实例启用默认备份时间表。您可以在创建实例时或稍后修改实例时,在实例中启用或停用默认备份时间表。
您可以为现有实例启用默认备份时间表。不过,默认备份时间表不适用于实例中的现有数据库。默认备份时间表仅适用于实例中的新数据库。
默认备份时间表需要 24 小时才能生效并开始创建备份。
您必须先删除实例中的所有备份,然后才能删除实例。如果您出于测试目的创建和删除实例,则可以在 24 小时内删除新实例,以免手动删除其备份。
如需了解如何启用或停用默认备份时间表,请参阅修改默认备份时间表类型。
完整备份和增量备份的存储费用
每个 Spanner 备份都包含以下字段,用于提供存储空间用量方面的信息:
exclusiveSizeBytes
:显示备份所需的字节数。此大小表示备份的计费大小。freeableSizeBytes
:显示删除备份后释放的字节数。oldestVersionTime
:显示链中最早的完整备份的versionTime
,即使该备份已过期也是如此。您可以使用此字段了解系统正在存储哪些数据。
增量备份可以为您节省存储费用。增量备份的 exclusiveSizeBytes
字段可能比完整备份小得多,因为增量备份只需存储链中上次备份之后发生的更改。为链中的每个备份添加此字段值,可反映链中的备份使用的字节总数。
增量备份的恢复取决于同一链中的所有较早备份。这意味着,如果存在较新的增量备份,则无法从系统中删除该链中所有较早备份的数据,并且同一链中所有较早备份的 freeableSizeBytes
字段均为零。
假设您为大小为 100 GB 且每天增加 10 GB 的数据库创建了完整备份时间表和增量备份时间表。下表显示了这些备份时间表的可能存储费用:
日 | 完整的定期备份大小 | 增量时间表备份大小 |
---|---|---|
1 | 100 GB | 100 GB |
2 | 110 GB | 10 GB |
3 | 120 GB | 10 GB |
4 | 130 GB | 10 GB |
5 | 140 GB | 10 GB |
在 5 天内,完整备份时间表会使用 600 GB 的存储空间,而增量备份时间表会使用大约 140 GB 的存储空间。对于增量备份时间表,完整备份大小是链中截至该备份的所有备份大小的总和,并反映在 sizeBytes
字段中。
备份复制功能的运作方式
借助 Spanner,您可以将 Spanner 数据库的备份从一个实例复制到其他区域或项目中的另一个实例,以提供额外的数据保护和合规性功能。
如果目标区域或源区域 Google Cloud 处于停机状态,则无法复制备份。为了在发生区域服务中断时保护您的数据,您需要定期将备份复制到受影响区域之外的位置。
复制的备份具有与原始备份相同的关键功能。此外,您还可以在复制的备份所在的实例中恢复复制的备份,以支持跨区域和跨项目备份和恢复用例。
Spanner 备份的存储位置
备份是 Spanner 中的资源。每个备份资源都安排在资源层次结构中与其源数据库相同的实例下,并具有以下格式的资源路径:
projects/PROJECT_ID/instances/INSTANCE_ID/backups/BACKUP_NAME
请替换以下内容:
PROJECT_ID
:项目 ID。INSTANCE_ID
:实例 ID。BACKUP_NAME
:备份名称。
即使在备份的源数据库被删除后,备份仍会继续存在,但不会超过其父实例的生命周期。为防止意外删除备份,您无法删除存在备份的 Spanner 实例。如果您要删除实例,我们建议先恢复备份,然后导出恢复的数据库,然后再删除备份和实例。
加密
Spanner 备份(如数据库)由Google-owned and Google-managed encryption keys 或客户管理的加密密钥 (CMEK) 进行加密。默认情况下,备份使用与其数据库相同的加密配置,但您可以在创建备份时指定不同的加密配置来替换此行为。如果备份启用了 CMEK,则在创建备份时会使用主要版本的 KMS 密钥对备份进行加密。创建备份后,即使 KMS 密钥已轮替,其密钥和密钥版本也无法修改。如需了解详情,请参阅创建启用 CMEK 的备份。
复制的备份将使用与其来源备份加密相同的加密配置(Google-owned and Google-managed encryption keys 或客户管理的加密密钥 [CMEK])。您可以通过在复制备份时指定不同的加密配置来替换此行为。如果您希望在跨区域复制时使用 CMEK 加密复制的备份,请指定与目标区域对应的 Cloud KMS 密钥。
您可以在创建或修改备份时间表时指定加密配置。如果您希望备份时间表创建的备份由 CMEK 密钥加密,则需要指定密钥路径。
增量备份仅支持使用Google-owned and Google-managed encryption keys进行加密,即使数据库是使用 CMEK 密钥加密的也是如此。
性能
本部分介绍了如何在 Spanner 中实现最佳备份性能。
备份性能
执行备份时,Spanner 会创建一个备份作业,以将数据从数据库直接复制到备份存储空间,并根据数据库大小调整此作业的大小。此备份作业不使用分配给数据库实例的 CPU 资源,因此不会影响实例的性能。此外,数据库实例上的计算负载不会影响备份操作的速度。如需跟踪备份操作的进度和完成情况,请参阅显示备份进度。
通常,大多数备份需要 1-4 小时。由于备份的大小或资源存在内部队列,某些备份可能需要更长时间。如果在没有其他因素更改时,备份花费的时间比平常长,则可能是由于在可用区中安排备份任务时发生延迟。此过程最多可能需要 30 分钟。我们建议您不要取消并重启备份,因为使用新备份操作时您可能会遇到相同的时间安排延迟。
复制备份时的性能
备份的复制时间取决于源备份的大小以及为复制的备份选择的目标区域等因素。通常,大多数副本都会在 1-4 小时内完成。某些副本可能需要更长时间,具体取决于备份大小和目标区域。复制备份对源实例或数据库没有任何性能影响。您可以将源备份的多个副本同时复制到位于不同区域的实例,而不会产生任何性能影响问题。
当您复制增量备份时,Spanner 还会复制链中的所有旧备份。Spanner 会同时复制所有备份,而不是逐个复制备份链,从而提升性能。
删除备份
如果同一链中存在较新的增量备份,则删除增量备份后,您可能无法恢复存储空间。较新的增量备份取决于已删除的增量备份中的数据以及链中的较旧备份。Spanner 会保留这些数据,并且仅在所有较新的增量备份过期后才会释放存储空间。freeableSizeBytes
字段显示删除备份后可重新获得的存储空间量。
价格
系统会根据您的备份每单位时间使用的存储量向您收取费用。备份操作完成后,便开始计费,并且将持续计费直到删除备份为止。已完成的备份将至少收取 24 小时的费用。如果您创建了备份,然后在备份完成后不久将其删除,则您仍需支付 24 小时的费用。
备份的副本与原始备份具有相同的存储费用。如果您在位于不同区域的两个实例之间创建副本,则需要支付出站数据传输费用。
例如,如果您将数据库从源多区域实例配置 nam7
复制到目标多区域实例配置 nam-eur-asia3
,则需要支付以下费用:
- 重叠的
us-central1
区域无需付费 - 见证者
us-central2
区域无需付费 - 洲际数据传输费用会应用两次:每个新大洲(欧洲和亚洲)各一次
- 同一大洲内不同区域之间的数据传输费用对
us-east1
应用一次 - 在欧洲,同一大洲内不同区域之间的数据传输费用只收取一次
Spanner 会优化复制过程,以尽可能减少跨区域传输的次数。这有助于最大限度地降低数据传输费用,同时提供快速的复制备份体验。
备份会单独存储和计费。备份存储空间不会影响数据库存储空间的结算或数据库存储空间限制。如需了解详情,另请参阅存储空间利用率指标。
如需详细了解备份费用,请参阅 Spanner 价格。