Spanner Omni 备份

借助 Spanner Omni,您可以按需创建数据库的完整备份,也可以使用备份时间表进行创建。备份会存储数据库的全部数据。当运维人员或应用错误导致逻辑数据损坏时,您可以恢复备份。

Spanner Omni 备份概览

备份具有高可用性,可在创建后保留长达一年的时间。每个备份都有关联的 createTimeversionTimecreateTime 是 Spanner Omni 开始创建备份的时间戳。versionTime 是备份捕获数据库内容的时间戳。备份包含数据库在 versionTime 时的一致视图。

对于按需备份,createTimeversionTime 默认相同。如有需要,您可以在创建按需备份时指定较旧的 versionTime(如果该 versionTime 位于数据库的版本保留期限内)。

对于预定备份,versionTime 是您在创建备份时间表时选择的时间。Spanner Omni 会在 versionTime 的四小时内开始创建备份,因此 createTime 会在此四小时内。这与按需备份不同,在按需备份中,Spanner Omni 会在收到请求时开始创建备份。

例如,假设您创建了一个备份时间表,其频率为 0 7 * * * UTC(即世界协调时间 [UTC] 每天上午 7:00 备份一次)。这意味着,对于每次备份,versionTime 为世界协调时间 (UTC) 上午 7:00,而 createTime 是世界协调时间 (UTC) 上午 7:00 到上午 11:00 之间四小时时段内的时间戳。

主要特性

Spanner Omni 备份提供数据一致性、弹性外部复制和自动过期功能。

  • 数据一致性:Spanner Omni 数据库的备份在备份时间点 versionTime 具有事务一致性和外部一致性。

  • 复制:备份文件存储在 Spanner Omni 部署之外的外部存储系统中。

  • 自动失效:所有备份都有一个用户指定的失效日期,用于确定何时删除备份。Spanner Omni 会以异步方式删除失效的备份,因此备份失效和实际删除之间可能会有延迟。

外部存储

外部存储空间是指 Spanner Omni 部署之外的远程存储空间。您可以将 Amazon Simple Storage Service (Amazon S3)、Cloud Storage 或任何与 Amazon S3 兼容的存储空间配置为外部存储空间。Spanner Omni 会将备份文件存储在此外部存储空间中。

外部存储空间管理

通过创建、删除和列出备份的存储位置来管理外部存储空间。

创建外部存储设备

如需创建 Amazon S3 外部存储空间,请运行以下命令:

spanner external-storages create EXTERNAL_STORAGE_ID \
  --s3-bucket-name=BUCKET_NAME \
  --s3-region=AWS_REGION \
  --s3-assume-role-arn=ASSUME_ROLE_ARN

创建 Cloud Storage 外部存储空间

如需创建 Cloud Storage 外部存储空间,请运行以下命令:

spanner external-storages create EXTERNAL_STORAGE_ID \
   --gcs-bucket-name=BUCKET_NAME

创建与 Amazon S3 兼容的外部存储空间

如需创建与 Amazon S3 兼容的外部存储空间,请运行以下命令:

spanner external-storages create EXTERNAL_STORAGE_ID \
    --s3-compatible-bucket-name=BUCKET_NAME \
    --s3-compatible-endpoint=ENDPOINT \
    --s3-compatible-credential-file-path=FILE

删除外部存储空间

如需删除外部存储,请先确保没有现有备份或正在进行的备份。然后运行以下命令:

spanner external-storages delete EXTERNAL_STORAGE_ID

描述外部存储空间

如需获取有关外部存储空间的信息,请运行以下命令:

spanner external-storages describe EXTERNAL_STORAGE_ID

列出外部存储空间

如需获取外部存储设备的列表,请运行以下命令:

spanner external-storages list

备份描述符

备份描述符表示存储在外部存储空间中的已完成备份的元数据和备份文件路径。

spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID

备份信息

创建备份时,备份元数据会存储在 Spanner Omni 中,而备份文件则会存储在外部存储空间中。

备份包含数据库在备份 versionTime 时的以下信息:

  • 完整备份包含所有数据。

  • 架构信息,包括表名称、字段、数据类型、二级索引、变更数据流以及这些实体之间的关系。

  • 使用 ALTER DATABASE SET OPTIONS 命令设置的所有数据库选项。

Spanner Omni 备份不包含以下信息:

  • versionTime 之后对数据或架构进行的任何修改。

  • Identity and Access Management (IAM) 政策。

  • 变更数据流数据记录。虽然系统会存储变更数据流架构,但变更数据流数据应在近乎同步的时间流式传输并使用其描述的变更。

为确保备份的外部一致性,Spanner Omni 会在 versionTime 固定数据库的内容。这样可以防止垃圾回收系统在备份操作期间移除相关数据值。

备份管理

如需创建备份,您需要拥有以下权限。请让管理员为您授予部署的以下 IAM 角色:

操作 IAM 角色
创建、查看、更新和删除备份 roles/spanner.backupAdmin
创建和查看备份 roles/spanner.backupWriter

创建备份

创建按需备份。

spanner backups create BACKUP_NAME \
--database=DATABASE_ID \
--retention-period=RETENTION_PERIOD \
--async

删除备份

删除备份元数据和文件。

spanner backups delete BACKUP_NAME

描述备份

检索有关备份的信息。

spanner backups describe BACKUP_NAME

列出备份

列出部署中现有的 Spanner Omni 备份。

spanner backups list

更新备份过期时间

更新备份的失效日期。

spanner backups update-metadata BACKUP_NAME \
--expiration-date=EXPIRATION_DATE

导入备份

如果您不小心删除了部署,但未从外部存储中删除备份文件,则可以从中导入备份。

  1. 在新部署中创建外部存储空间,该存储空间使用原始部署中的同一 Amazon S3 或 Cloud Storage 存储桶。

    spanner external-storages create EXTERNAL_STORAGE_ID \
      --gcs-bucket-name=BUCKET_NAME
    
  2. 列出外部存储空间中的备份描述符。

    spanner external-storages backup-descriptors list EXTERNAL_STORAGE_ID
    
  3. 选择备份描述符,然后将其导入到新部署中。

    spanner backups import BACKUP_NAME \
     --external-storage EXTERNAL_STORAGE_ID \
     --backup-descriptor BACKUP_DESCRIPTOR \
     --retention-period 24h
    

备份时间表

借助 Spanner Omni,您可以为数据库安排完整备份。您可以在时间表中指定 Spanner Omni 创建备份的频率。

完整备份时间表每 12 小时或更长时间创建一次备份。备份会在所安排时间的 30 分钟内启动。每个数据库最多可以有四个备份时间表。

备份时间表管理

如需创建和管理备份时间表,您需要具备以下权限。请让您的管理员为您授予部署的以下 IAM 角色:

  • 创建、查看、更新和删除备份时间表:roles/spanner.backupAdmin

  • 创建和查看备份时间表:roles/spanner.backupWriter

创建备份时间表

为 Spanner Omni 数据库创建新的备份时间表。

spanner backup-schedules create SCHEDULE_ID \
  --database=DATABASE_ID \
  --retention-duration=RETENTION_DURATION \
  --cron="CRONTAB_EXPRESSION"

获取备份时间表

获取有关特定备份时间表的信息。

spanner backup-schedules describe SCHEDULE_ID --database=DATABASE_ID

列出备份时间表

列出指定数据库的所有备份时间表。

spanner backup-schedules list --database=DATABASE_ID

更新备份时间表

更新现有备份时间表的属性。

spanner backup-schedules update SCHEDULE_ID \
  --database=DATABASE_ID \
  --retention-duration=RETENTION_DURATION \
  --cron="CRONTAB_EXPRESSION"

删除备份时间表

从数据库中删除备份时间表。

spanner backup-schedules delete SCHEDULE_ID --database=DATABASE_ID

设置 IAM 访问权限控制政策

为备份时间表设置 IAM 访问权限控制政策。

spanner backup-schedules set-iam-policy SCHEDULE_ID \
  --database=DATABASE_ID \
  policy.json

获取 IAM 访问权限控制政策

获取备份时间表的 IAM 访问权限控制政策。

spanner backup-schedules get-iam-policy SCHEDULE_ID --database=DATABASE_ID

比较备份存储空间与数据库存储空间

备份的存储大小可能小于或大于创建备份时源数据库的存储大小。

备份的存储空间可能小于数据库的存储空间,因为备份仅包含一个版本的数据,而实时数据库由于正在进行的操作,可能包含多个版本的数据。数据格式和压缩的差异也可能导致备份大小减小。

反之,备份的存储也可能大于数据库的存储,这取决于数据库的状态和创建备份的时间。

出于类似的原因,当您从备份恢复数据库时,其存储空间可能大于数据库的存储空间。如果备份创建完成后,大量数据被删除并压缩,则可能会出现这种情况。因此,备份大小取决于创建备份的时间以及随后对数据库进行的操作。

没有公式可以预测备份大小与实时数据库大小的相对关系。对于写入速率高的数据库(热数据库),备份可能小于实时数据库。不过,在某些情况下,备份大小可能会更大。