備份和恢復數據

本頁面介紹如何使用 Cloud Firestore 規劃備份功能。使用備份來保護您的資料免於應用程式級資料損壞或意外資料刪除。

備份可讓您配置備份計畫以每日或每週備份指定資料庫。然後,您可以使用這些備份將資料還原到新資料庫。

關於備份

備份是資料庫在某個時間點的一致副本。備份包含該時間點的所有資料和索引配置。備份不包含資料庫生存時間策略。備份與來源資料庫位於相同位置。

備份具有可設定的保留期,並且會儲存到保留期到期或刪除備份為止。刪除來源資料庫不會自動刪除相關備份。

Cloud Firestore 儲存與資料庫相關的備份和備份計畫相關的元資料。 Cloud Firestore 會保留此元數據,直到資料庫的所有備份過期或被刪除。

建立或保留備份不會影響即時資料庫中的讀取或寫入效能。

成本

當您使用備份時,您需要支付以下費用:

  • 每個備份使用的儲存量。
  • 對於還原操作,您需要根據備份的大小付費。

如需更多詳細資訊和確切費率,請參閱定價頁面。

在你開始之前

此功能需要Blaze 定價方案

所需角色

若要取得管理備份和備份計畫所需的權限,請要求管理員授予您以下一個或多個身分和存取管理角色:

  • roles/datastore.owner :對 Cloud Firestore 資料庫的完全存取權限
  • 以下角色也可用,但在 Google Cloud Platform Console 中不可見。使用 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

替換以下內容:

更新備份計劃

若要更新備份計畫的保留期,請使用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

替換以下內容:

請注意,刪除備份計畫不會刪除該計畫已建立的備份。您可以等待它們在保留期過後到期,或手動刪除備份,請參閱刪除備份

管理備份

列出備份

若要列出可用備份,請使用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。

輸出將包括metadatanameresponse元件:

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