備份及還原資料

本頁面說明如何使用 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 指令或 firebase firestore:databases:backups:schedules 指令。

建立每日備份排程

gcloud
如要建立每日備份排程,請將 --recurrence 標記設為 daily
gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

更改下列內容:

  • DATABASE_ID:要備份的資料庫 ID。請將預設資料庫設為 '(default)'
  • RETENTION_PERIOD:設為最多 14 週 (14w) 的值。
Firebase CLI
如要建立每日備份排程,請將 --recurrence 標記設為 DAILY
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'DAILY' \
--retention RETENTION_PERIOD

更改下列內容:

  • DATABASE_ID:要備份的資料庫 ID。請將預設資料庫設為 '(default)'
  • RETENTION_PERIOD:設為最多 14 週 (14w) 的值。
Terraform
如要建立每日備份排程,請建立 google_firestore_backup_schedule 資源。
resource "google_firestore_backup_schedule" "daily-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  daily_recurrence {}
}

更改下列內容:

  • PROJECT_ID:專案的 ID。
  • DATABASE_ID:要備份的資料庫 ID。請將預設資料庫設為 '(default)'
  • 您也可以使用 google_firestore_database 類型的 Terraform 資源資源參照
  • RETENTION_PERIOD_SECONDS:設為秒數的值,並在後面加上「s」。最大值為 8467200s (14 週)。

建立每週備份排程

gcloud
如要建立每週備份排程,請將 --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:設為最多 14 週 (14w) 的值。
  • DAY:星期幾。請設為下列任一值:
    • SUN 代表週日
    • MON (週一)
    • TUE (星期二)
    • WED 代表星期三
    • THU 代表星期四
    • FRI 代表星期五
    • SAT (星期六)
Firebase CLI
如要建立每週備份排程,請將 --recurrence 標記設為 WEEKLY
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'WEEKLY' \
--retention RETENTION_PERIOD
--day-of-week DAY
取代下列項目:
  • DATABASE_ID:要備份的資料庫 ID。請將預設資料庫設為 '(default)'
  • RETENTION_PERIOD:設為最多 14 週 (14w) 的值。
  • DAY:星期幾。請設為下列任一值:
    • SUNDAY 代表週日
    • MONDAY (週一)
    • TUESDAY (星期二)
    • WEDNESDAY 代表星期三
    • THURSDAY 代表星期四
    • FRIDAY 代表星期五
    • SATURDAY (星期六)
Terraform
如要建立每週備份排程,請建立 google_firestore_backup_schedule 資源。
resource "google_firestore_backup_schedule" "weekly-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  weekly_recurrence {
    day = DAY
  }
}

更改下列內容:

  • PROJECT_ID:專案的 ID。
  • DATABASE_ID:要備份的資料庫 ID。請將預設資料庫設為 '(default)'
  • 您也可以使用 google_firestore_database 類型的 Terraform 資源資源參照
  • RETENTION_PERIOD_SECONDS:設為秒數的值,並在後面加上「s」。最大值為 8467200s (14 週)。
  • DAY:星期幾。請設為下列任一值:
    • SUNDAY 代表週日
    • MONDAY (週一)
    • TUESDAY (星期二)
    • WEDNESDAY 代表星期三
    • THURSDAY 代表星期四
    • FRIDAY 代表星期五
    • SATURDAY (星期六)

列出備份排程

如要列出資料庫的所有備份排程,請使用下列其中一種方法:

gcloud
使用 gcloud alpha firestore backups schedules list 指令。
gcloud alpha firestore backups schedules list \
--database='DATABASE_ID'
DATABASE_ID 替換為資料庫 ID。使用 '(default)' 做為預設資料庫。
Firebase CLI
使用 firebase firestore:backups:schedules:list 指令。
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
DATABASE_ID 替換為資料庫 ID。使用 '(default)' 做為預設資料庫。

說明備份排程

如要擷取備份排程的相關資訊,請使用下列其中一種方法:

gcloud
使用 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
使用 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:設為最多 14 週 (14w) 的值。
Firebase CLI
使用 firebase firestore:backups:schedules:update 指令:
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
取代以下內容:
  • BACKUP_SCHEDULE:備份排程的完整資源名稱。您可以在列出所有備份排程時查看各個備份排程的名稱。
  • RETENTION_PERIOD:設為最多 14 週 (14w) 的值。

您可以更新備份排程的保留期限,但無法更新週期的保留期限。如果您需要建立不同週期的備份排程,請刪除不再需要的舊備份排程,並使用所需的週期建立新的備份排程。

刪除備份排程

如要刪除備份排程,請使用下列其中一種方法:

gcloud
使用 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。
Firebase CLI
使用 firebase firestore:backups:schedules:delete 指令:
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
取代以下內容:
  • BACKUP_SCHEDULE:備份排程的完整資源名稱。您可以在列出所有備份排程時查看各個備份排程的名稱。

請注意,刪除備份排程不會刪除這個排程已建立的備份。您可以等待這些備份在保留期限屆滿後到期,或手動刪除備份,請參閱刪除備份一節。

管理備份

列出備份

如要列出可用的備份,請使用下列其中一種方法:

gcloud
使用 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 位置名稱。
Firebase CLI
請使用 firebase firestore:backups:list 指令:
firebase firestore:backups:list
如果只要列出特定位置的備份,請使用 --location 標記:
firebase firestore:backups:list \
--location=LOCATION
LOCATION 替換成 Cloud Firestore 位置名稱。

說明備份

如要查看備份的詳細資料,請使用下列其中一種方法:

gcloud
使用 gcloud alpha firestore backups describe 指令:
gcloud alpha firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
替換下列內容:
  • LOCATION:資料庫的位置。
  • BACKUP_ID:備份的 ID。您可以在列出所有備份時查看每項備份的 ID。
Firebase CLI
使用 firebase firestore:backups:get 指令:
firebase firestore:backups:get BACKUP
取代以下內容:
  • BACKUP:備份的完整資源名稱。您可以在列出所有備份時查看個別備份的名稱。

刪除備份

如要刪除備份,請使用下列其中一種方法。 警告:備份一經刪除即無法復原。
gcloud
使用 gcloud alpha firestore backups delete 指令:
gcloud alpha firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
替換下列內容:
  • LOCATION:資料庫的位置。
  • BACKUP_ID:備份的 ID。您可以在列出所有備份時查看每項備份的 ID。
Firebase CLI
使用 firebase firestore:backups:delete 指令:
firebase firestore:backups:delete \
BACKUP
取代以下內容:
  • BACKUP:備份的完整資源名稱。您可以在列出所有備份時查看各項備份的名稱。

從資料庫備份還原資料

還原作業會將備份中的資料寫入新的 Cloud Firestore 資料庫,

如要開始進行還原作業,請使用下列其中一種方法:

gcloud
使用 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
Firebase CLI
使用 firebase firestore:databases:restore 指令:
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
取代以下內容:
  • BACKUP:備份的完整資源名稱。您可以在列出所有備份時查看個別備份的名稱。
  • DATABASE_ID:新資料庫的資料庫 ID。無法使用已在使用中的資料庫 ID。