本页面介绍了如何使用 Cloud Firestore 计划备份功能。使用备份可以保护您的数据免遭应用级数据损坏或意外的数据删除。
通过备份,您可以将备份时间表配置为每天或每周对指定的数据库进行备份。然后,您可以使用这些备份将数据恢复到新数据库。
备份简介
备份是指数据库在某个时间点的一致副本。备份包含该时间点的所有数据和索引配置。备份不包含数据库存留时间政策。备份与源数据库位于同一位置。
备份的保留期限可配置,并且会存储到保留期限到期或您删除备份为止。如果删除源数据库,将不会自动删除相关备份。
Cloud Firestore 会存储与数据库相关的备份和备份时间表的元数据。Cloud Firestore 会保留这些元数据,直到数据库的所有备份过期或被删除。
创建或保留备份的操作不会影响实时数据库中的读取或写入性能。
费用
使用备份时,您需要为以下各项支付费用:
- 每个备份所使用的存储空间容量。
- 对于恢复操作,您需要根据备份大小支付费用。
如需了解详情和确切费率,请参阅价格页面。
准备工作
此功能要求使用 Blaze 定价方案。所需的角色
如需获取管理备份和备份时间表所需的权限,请让您的管理员为您授予以下一个或多个 Identity and Access Management 角色:
roles/datastore.owner
:拥有对 Cloud Firestore 数据库的完整访问权限以下角色也可用,但不会在 Google Cloud Platform 控制台中显示。使用 Google Cloud CLI 可分配这些角色:
roles/datastore.backupsAdmin
:拥有对备份的读写权限roles/datastore.backupsViewer
:拥有对备份的读取权限roles/datastore.backupSchedulesAdmin
:拥有对备份时间表的读写权限roles/datastore.backupSchedulesViewer
:拥有对备份时间表的读取权限roles/datastore.restoreAdmin
:拥有启动恢复操作的权限
创建和管理备份时间表
以下示例演示了如何设置备份时间表。对于每个数据库,您最多可以配置一个每日备份时间表和一个每周备份时间表。您无法为一周中的不同日期配置多个每周备份时间表。
您无法配置备份的确切时段。系统会在每天的不同时间进行备份。对于每周备份时间表,您可以配置在星期几进行备份。
创建备份时间表
如需为数据库创建备份时间表,请使用 gcloud alpha firestore backups schedules create
命令。
创建每日备份时间表
如需创建每日备份时间表,请将 --recurrence
标志设置为 daily
:
gcloud alpha firestore backups schedules create \ --database='DATABASE_ID' \ --recurrence=daily \ --retention=RETENTION_PERIOD
请替换以下内容:
DATABASE_ID
:要备份的数据库的 ID。对于默认数据库,应设置为(default)
。RETENTION_PERIOD
:对于daily
备份重复周期,请将此项设置为一个不超过 7 天 (7d
) 的值。如果您设置weekly
备份重复周期,请将此项设置为一个不超过 14 周 (14w
) 的值。
创建每周备份时间表
如需创建每周备份时间表,请将 --recurrence
标志设置为 weekly
:
gcloud alpha firestore backups schedules create \ --database='DATABASE_ID' \ --recurrence=weekly \ --retention=RETENTION_PERIOD \ --day-of-week=DAY
请替换以下内容:
DATABASE_ID
:要备份的数据库的 ID。对于默认数据库,应设置为(default)
。RETENTION_PERIOD
:对于weekly
备份重复周期,请将此项设置为一个不超过 14 周 (14w
) 的值。DAY
:在星期几进行备份。设置为以下其中一项:SUN
表示周日MON
表示周一TUE
表示周二WED
表示周三THU
表示周四FRI
表示周五SAT
表示周六
列出备份时间表
如需列出数据库的所有备份时间表,请使用 gcloud alpha firestore backups schedules list
命令。此命令会返回所有备份时间表的相关信息。
gcloud alpha firestore backups schedules list \ --database='DATABASE_ID'
将 DATABASE_ID
替换为数据库的 ID。对于默认数据库,请使用 (default)
。
描述备份时间表
如需检索备份时间表的相关信息,请使用 gcloud alpha firestore backups schedules describe
命令:
gcloud alpha firestore backups schedules describe \ --database='DATABASE_ID' \ --backup-schedule=BACKUP_SCHEDULE_ID
请替换以下内容:
DATABASE_ID
:要备份的数据库的 ID。对于默认数据库,应设置为(default)
。BACKUP_SCHEDULE_ID
:备份时间表的 ID。在列出所有备份时间表时,您可以查看每个备份时间表的 ID。
更新备份时间表
如需更新备份时间表的保留期限,请使用 gcloud alpha firestore backups schedules update
命令:
gcloud alpha firestore backups schedules update \ --database='DATABASE_ID' \ --backup-schedule=BACKUP_SCHEDULE_ID --retention=RETENTION_PERIOD
请替换以下内容:
DATABASE_ID
:要备份的数据库的 ID。对于默认数据库,应设置为(default)
。BACKUP_SCHEDULE_ID
:备份时间表的 ID。在列出所有备份时间表时,您可以查看每个备份时间表的 ID。RETENTION_PERIOD
:如果您设置daily
备份重复周期,请将此项设置为一个不超过 7 天 (7d
) 的值。如果您设置weekly
备份重复周期,请将此项设置为一个不超过 14 周 (14w
) 的值。
删除备份时间表
如需删除备份时间表,请使用 gcloud alpha firestore backups schedules delete
命令:
gcloud alpha firestore backups schedules delete \ --database='DATABASE_ID' \ --backup-schedule=BACKUP_SCHEDULE_ID
请替换以下内容:
DATABASE_ID
:要备份的数据库的 ID。对于默认数据库,应设置为(default)
。BACKUP_SCHEDULE_ID
:备份时间表的 ID。在列出所有备份时间表时,您可以查看每个备份时间表的 ID。
请注意,删除备份时间表时,不会删除此时间表已创建的备份。您可以等待其在保留期限结束后过期;如需手动删除备份,请参阅删除备份。
管理备份
列出备份
如需列出可用的备份,请使用 gcloud alpha firestore backups list
命令:
gcloud alpha firestore backups list \ --format="table(name, database, state)"
--format="table(name, database, state)"
标志将输出的格式设置为更易于阅读的格式。
如需仅列出来自特定位置的备份,请使用 --location
标志:
gcloud alpha firestore backups list \ --location=LOCATION \ --format="table(name, database, state)"
将 LOCATION
替换为 Cloud Firestore 位置的名称。
描述备份
如需查看有关备份的详细信息,请使用 gcloud alpha firestore backups describe
命令:
gcloud alpha firestore backups describe \ --location=LOCATION \ --backup=BACKUP_ID
LOCATION
:数据库的位置。BACKUP_ID
:备份的 ID。您可以在列出所有备份时查看每个备份的 ID。
删除备份
如需删除备份,请使用 gcloud alpha firestore backups delete
命令:
gcloud alpha firestore backups delete \ --location=LOCATION \ --backup=BACKUP_ID
LOCATION
:数据库的位置。BACKUP_ID
:备份的 ID。您可以在列出所有备份时查看每个备份的 ID。
通过数据库备份恢复数据
恢复操作会将备份中的数据写入新的 Cloud Firestore 数据库。如需开始执行恢复操作,请使用 gcloud alpha firestore databases restore
命令:
gcloud alpha firestore databases restore \ --source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \ --destination-database='DATABASE_ID'
PROJECT_ID
:您的项目 ID。LOCATION
:数据库备份的位置以及为恢复的数据创建的新数据库的位置。BACKUP_ID
:备份的 ID。 您可以在列出所有备份时查看每个备份的 ID。DATABASE_ID
:新数据库的 ID。您无法使用已在使用的数据库 ID。
输出将包含 metadata
、name
和 response
这三个组成部分:
metadata: '@type': type.googleapis.com/google.firestore.admin.v1.RestoreDatabaseMetadata backup: projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID database: projects/PROJECT_ID/databases/DATABASE_ID operationState: PROCESSING progressPercentage: completedWork: '20' estimatedWork: '100' startTime: '2023-12-06T14:20:17.398325Z' name: projects/PROJECT_ID/databases/DATABASE_ID/operations/operation_uuid response: '@type': type.googleapis.com/google.firestore.admin.v1.Database createTime: '2023-12-06T14:20:17.398325Z' name: projects/PROJECT_ID/databases/DATABASE_ID ...
metadata
字段包含一个 progressPercentage
组成部分(详细说明目前为止恢复的估算进度)和一个 operationState
(用于指定恢复的总体状态)。
如需再次检索此信息,请使用 gcloud firestore operations list
:
gcloud firestore operations list --database=DATABASE_ID
或者,将上述输出中的 name
字段与 gcloud firestore operations describe
搭配使用:
gcloud firestore operations describe OPERATION_NAME