借助 Spanner 备份,您可以创建 按需使用 Spanner 数据库,并恢复它们以提供 针对操作者和应用错误提供保护,这些错误会导致逻辑数据 或破坏。备份具备高可用性和加密功能,最长可保留 自创建之日起一年内有效创建备份时,备份 与其源数据库位于同一实例、区域和项目中。如果您 需要在其他区域或项目中恢复备份以确保合规性或 因此您可以将备份复制到 独立的区域或项目如需将备份保留超过一年,我们建议您 导出数据库。为防止出现逻辑 数据损坏,Spanner 还提供 时间点恢复。您还可以启用数据库 删除保护,以防止 意外删除数据库。
主要特性
数据一致性:备份属于事务性 对外一致 Spanner 数据库的副本,位于备份的
version_time
。复制:备份与其源数据库驻留在同一个实例中 复制到相同的地理位置 对于区域实例, 备份会分别存储在这三个读写可用区中对于 双区域和多区域实例时, 备份会存储在包含读写权限或只读字段的所有可用区中 副本。如果您需要将数据库备份存储在 则可以从来源复制已完成的备份 实例复制到位于不同区域的目标实例,或者 项目。如需了解详情,请参阅复制备份。
自动过期:所有备份都有用户指定的过期日期 此设置用于确定系统将于何时自动删除。 Spanner 会异步删除过期的备份, 备份过期和实际删除之间的延迟。
推荐的备份方法
下表介绍了几种备份策略, 实施方案的方法,以及 方法。
备份策略 | 推荐做法 | 建议方法的最长保留期限 |
---|---|---|
将数据库备份存储在与其源数据库相同的实例、区域和项目中 | 创建备份。 | 1 年 |
将数据库的备份存储在与其源数据库不同的实例、区域或项目中(即跨区域备份或跨项目备份) | 创建备份,然后将其复制到其他区域或项目中的实例。 | 1 年 |
在 Cloud Storage 中存储备份 | 将数据库导出到 Cloud Storage 存储桶。有关备份与导出的详细比较,请参阅选择备份和恢复还是导入和导出。 | 无限制(保留到删除) |
时间点恢复 (PITR) | 如需从过去某个时间点恢复数据,请选择 PITR。您可以将数据库 version_retention_period 从默认的 1 小时更改为最多 7 天。 |
7 天 |
使用 Identity and Access Management (IAM) 进行访问权限控制
借助 IAM,您可以控制对 Spanner 资源的访问权限 其中包括备份如果您刚开始接触 有关 IAM、角色和权限的信息,请参阅 IAM 概览。
备份资源在 Spanner 中的实例下进行整理 资源层次结构我们建议在 项目级或实例级。如果您需要更精细的控制 IAM 政策还可在备份和数据库级层应用 但考虑到复杂性,我们不建议这样做。请注意 不包含数据库元数据(如 IAM 政策),因此当您 恢复数据库时,数据库最初会从其父级继承政策 实例。
本部分介绍了有权访问备份和 恢复。
以下角色专为备份而设计:
spanner.backupAdmin
:有权创建、查看、更新、复制和删除 备份。此角色还可以查看和管理备份的 IAM 政策。此角色无法从备份恢复数据库。spanner.backupWriter
:有权创建和复制备份,但无法 更新或删除它们此角色旨在供具有以下特征的脚本使用: 自动备份创建过程。
以下角色也可以访问 Spanner 备份:
spanner.admin
:拥有对备份的完整访问权限。此角色拥有 拥有对所有 Spanner 资源的完全访问权限。owner
:拥有对备份的完整访问权限。editor
:拥有对备份的完整访问权限。viewer
:有权查看备份和备份操作。 此角色无法创建、更新、删除或复制 备份。
如需了解详情,请参阅 Spanner IAM。
备份创建的工作原理
您可以为任何 Spanner 数据库创建备份。这些备份
因为它包含数据库中的所有数据
(包括架构和二级索引)位于
version_time
备份。version_time
之后对数据或架构所做的任何修改
不会包含在备份中备份包括
都设置了
ALTER DATABASE SET OPTIONS
命令,但不包括 Identity and Access Management (IAM)
政策。当您创建备份时,备份会驻留在同一个实例中,
将项目作为其源数据库。
您可以通过以下方式创建备份:
- 在 Google Cloud 控制台中
- 使用 Google Cloud CLI
- 使用客户端库
- 使用 REST 或 RPC API
创建备份时,必须指定源数据库、
备份资源和到期日期(备份创建后 1 年内)
)。您还可以选择指定一个
version_time
:可用于备份
您的数据库会恢复到较早的时间点version_time
字段通常为
用于同步多个数据库的备份或恢复数据
使用时间点恢复。如果 version_time
不是
则设为备份的 create_time
。系统会创建
备份资源和长期运行的
备份操作,以便跟踪
备份的进度新创建的备份位于同一
实例、区域和项目作为其源数据库。
为了确保备份的外部一致性,Spanner 会将
位于 create_time
的数据库内容。这可以防止垃圾回收
系统在备份期间移除相关数据值
操作。然后,实例中的每个读写和只读可用区
并行复制数据。如果任何可用区暂时不可用,备份
直到该区域恢复在线状态并完成操作才完成。备份
操作完成后立即恢复对于多区域实例
所有区域中的读写可用区和只读可用区都必须完成备份
然后才能将备份标记为可恢复
备份还包括数据库变更数据流的架构,但不包含任何 现有更改记录变更数据流数据 几乎同时在使用它所描述的更改的同时使用。因此 Spanner 会将这些数据从备份中排除。
备份复制的工作原理
Spanner 备份和恢复可让您 将 Spanner 数据库从一个实例备份到另一个实例 位于不同区域或项目中的实例,以提供额外的 数据保护和合规性功能。复制的备份已 与原始版本相同的主要功能 备份。此外,您还可以恢复 在复制备份所在的实例中创建复制备份,以支持跨区域 以及跨项目备份和恢复用例。
常见的跨区域用例
复制备份的一些常见跨区域用例包括: 以下:
在其他区域保留备份以确保合规性 监管要求。
例如,您可以复制数据库的备份 特定区域中的实例 生产数据,以满足合规性要求。
在单独的区域维护备份,以便进行灾难恢复和处理业务 以实现连续性的目的。
例如,您可以将备份数据库复制到目标实例, 用于实现非零恢复时间目标 (RTO) 和 恢复点目标 (RPO)。 然后,如果需要,您可以使用 目标实例。(如果您的应用具有零 RTO 和零 RPO) 我们建议您为灾难配置 Spanner 多区域配置 恢复计划。)
常见的跨项目用例
复制备份的一些常见跨项目用例包括 以下:
- 在单独的项目中维护备份副本,以满足运营、安全性和 或合规要求
在开发项目、测试项目和生产项目之间复制和移动数据。
例如,如果要将数据从生产项目 您可以创建生产数据的备份,然后将您的 备份至测试项目。复制操作完成后,您可以 将复制的备份恢复到测试项目中的实例。
将数据库从一个项目迁移到另一个项目(请注意, 迁移期间会停机)。
您可以将备份复制到其他区域或项目中的目标实例
方法是指定源备份、目标备份和到期日期
自源备份创建时间起一年内有效。也就是说,
expiration_date
必须至少为自当前副本之时起的 6 小时
且最多在来源备份 create_time
的 366 天后处理该请求。
在副本备份请求开始时,Spanner 会创建一个
备份资源和长时间运行的备份操作,以帮助跟踪进度
备份。备份会复制到
目标实例。如果某个可用区暂时不可用,则备份副本
只有在该区域恢复在线状态后才会完成。您将无法
在复制过程中删除目标实例。跟踪进度和
复制备份操作的完成状态,请按照显示备份
进度。
复制完成后,您可以删除不需要的源备份
。复制完成后,您可以使用
GetBackup
、UpdateBackup
和 DeleteBackup
(包含复制的备份)。
启动备份副本的前提条件
如果您要将备份复制到其他区域或项目中的实例, 需要先设置和配置目标实例。目的地 instance 是备份副本所在的实例。它可以是 小至 100 个处理单元,它不会 需要具有与源实例相同的实例配置(即 实例)。在恢复之前,请确保 目标实例已预配足够的节点或处理单元来支持 根据每个节点 10TB 的存储空间限制确定数据库大小(也就是说, 至少需要 2 个节点才能恢复 20TB 的备份)。创建新目的地 实例,请参阅 创建和管理实例。
其他注意事项
其他考虑因素包括:
- 将备份从源实例复制到目标实例时, 复制的备份与其源备份无关。复制 操作完成后,源实例中有一个备份, 备份。如果来源中不需要备份 您可以将其删除
- 当您将备份复制到区域实例时,备份数据会复制到 三个读写可用区的存储分区中
- 将备份复制到多区域实例时,备份数据会复制 实例中的每个可用区(其中包含读写或只读 副本。
- 您可以同时复制多个备份。
- 您可以在复制过程中更新或删除目标备份 仍在进行中。如果您删除目标备份,正在进行的副本 操作将会取消
- 当存在复制时,您可以在源实例中恢复备份 操作正在进行中。
- 您可以在复制操作完成之前将其取消。
在复制过程中,不允许进行以下操作:
- 复制操作正在进行中时,您无法删除源备份。
- 您无法对复制的目标备份启动新的复制或恢复操作 。复制完成后,便可 已重新复制或还原
Spanner 备份的存储位置
备份是 Spanner 中的资源。
每个备份资源
同一实例下作为其源数据库下
资源层次结构
并且资源路径格式为
projects/<project>/instances/<instance>/backups/<backup>
。
即使源数据库被删除,备份仍然存在,
但它的存在时间不能比其父实例长。要防止意外删除
您不能删除存在以下情况的 Spanner 实例
备份。如果要删除实例,我们建议您恢复
然后导出恢复的数据库,然后导出
删除备份和实例
加密
与数据库一样,Spanner 备份由 由 Google 管理或由客户管理的加密。默认情况下,备份会使用 相同的加密配置 作为其数据库,但您可以指定不同的 加密配置。如果备份启用了 CMEK, 系统会在备份时使用 KMS 密钥的主要版本对密钥进行加密 创建过程。创建备份后,即使 KMS 密钥已轮替,其密钥和密钥版本也无法修改。如需了解详情,请参阅创建启用 CMEK 的备份。
默认情况下,复制的备份使用相同的加密配置, 由 Google 管理或由客户管理 (CMEK),作为来源 备份加密。您可以通过指定其他加密来覆盖此行为。 配置。如果您想将已复制的备份 使用 CMEK 加密,请指定 KMS 密钥。
性能
本部分介绍了 Spanner 中的最佳备份性能。
备份性能
执行备份时,Spanner 会创建一个备份作业来复制 将数据从数据库直接传输到备份存储空间,并根据 数据库的大小此备份作业不使用分配的 CPU 资源 数据库实例,因此它不会影响实例的性能。 此外,数据库实例上的计算负载不会影响 备份操作。跟踪备份的进度和完成情况 请参阅显示备份进度。
通常,大多数备份需要 1-4 个小时。部分备份 或因为有内部队列 资源。在没有任何其他因素的情况下,备份花费的时间比平时长 发生变化,原因可能是在可用区中安排备份任务存在延迟。 有时,此过程最长可能需要 30 分钟。我们建议您不要取消 然后重新开始备份 延迟。
复制备份时的性能
复制备份所需的时间取决于 来源备份和为复制备份选择的目标区域。 通常,大多数副本会在 1-4 小时内完成。某些副本可能需要更长时间 具体取决于备份大小和目标区域。正在复制备份 不会对源实例或数据库的性能产生任何影响。 您可以为实例创建多个源备份的并发副本 而不会出现任何性能影响问题
价格
根据您的备份每个单元的存储空间用量计费 。备份操作完成后,系统会立即开始计费 直到备份被删除为止。对于已完成的备份,您需要支付最低费用 。如果您创建了备份,然后在备份完成后一分钟将其删除, 您仍然需要支付 24 小时的费用。
备份的副本需支付相同的存储费用 作为原始备份如果您在两个占用相同内存的实例之间 则出站数据传输费用 。
例如,如果您从源多区域实例复制数据库,
将配置 nam7
更改为目标多区域实例配置
nam-eur-asia3
,需支付以下费用:
- 针对重叠的
us-central1
区域免费 - 见证者
us-central2
区域免费 - 收取两次洲际数据传输费用:每个新大洲一次 (欧洲和亚洲)
- 对于同一大洲内不同区域之间的数据传输,您需支付一次费用
us-east1
- 在欧洲,您需要一次性支付同一大洲不同区域之间的数据传输费用
Spanner 优化了复制过程, 跨区域转移。这有助于最大限度地降低数据传输费用 提供快速复制备份体验。
备份会单独存储和计费。备份存储空间不会影响 数据库存储空间结算 或数据库存储空间上限。有关 另请参阅存储空间利用率指标。
如需详细了解备份费用,请参阅 Spanner 价格。
后续步骤
如需创建和配置备份,请参阅创建和管理备份。