Backup e ripristino dei dati

Questa pagina descrive come utilizzare la funzionalità dei backup pianificati di Firestore. Utilizza i backup per proteggere i dati dal danneggiamento dei dati a livello di applicazione o dall'eliminazione accidentale dei dati.

I backup consentono di configurare le pianificazioni dei backup in modo da eseguire backup giornalieri o settimanali del database specificato. Puoi quindi usare questi backup per ripristinare i dati in un nuovo database.

Informazioni sui backup

Un backup è una copia coerente del database in un determinato momento. Il backup contiene tutte le configurazioni di dati e indici in quel momento. Un backup non contiene criteri di durata del database. Un backup si trova nella stessa località del database di origine.

I backup hanno un periodo di conservazione configurabile e vengono archiviati fino alla scadenza del periodo di conservazione o fino a quando non elimini il backup. L'eliminazione del database di origine non elimina automaticamente i backup correlati.

Firestore archivia i metadati relativi ai backup e alle pianificazioni dei backup relativi a un database. Firestore conserva questi metadati fino alla scadenza o all'eliminazione di tutti i backup del database.

La creazione o la conservazione dei backup non influisce sulle prestazioni delle operazioni di lettura o scrittura nel database in tempo reale.

Costi

Quando utilizzi i backup, ti viene addebitato quanto segue:

  • La quantità di spazio di archiviazione utilizzata da ogni backup.
  • Per un'operazione di ripristino, l'addebito avviene in base alle dimensioni del backup.

Per ulteriori dettagli e tariffe esatte, consulta la pagina Prezzi.

Prima di iniziare

Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come controllare se la fatturazione è abilitata per un progetto.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire i backup e le pianificazioni dei backup, chiedi all'amministratore di concederti uno o più dei seguenti ruoli di Identity and Access Management:

  • roles/datastore.owner: accesso completo al database Firestore
  • Anche i ruoli seguenti sono disponibili, ma non visibili nella console Google Cloud. Utilizza Google Cloud CLI per assegnare questi ruoli:

    • roles/datastore.backupsAdmin: accesso in lettura e scrittura ai backup
    • roles/datastore.backupsViewer: accesso in lettura ai backup
    • roles/datastore.backupSchedulesAdmin: accesso in lettura e scrittura alle pianificazioni dei backup
    • roles/datastore.backupSchedulesViewer: accesso in lettura alle pianificazioni dei backup
    • roles/datastore.restoreAdmin: autorizzazioni per avviare le operazioni di ripristino

Crea e gestisci le pianificazioni dei backup

Gli esempi riportati di seguito mostrano come configurare una pianificazione del backup. Per ogni database, puoi configurare fino a una pianificazione giornaliera del backup e fino a una pianificazione settimanale del backup. Non puoi configurare più pianificazioni di backup settimanali per giorni della settimana diversi.

Non puoi configurare l'ora esatta del giorno del backup. I backup vengono eseguiti in orari diversi ogni giorno. Per le pianificazioni settimanali del backup, puoi configurare il giorno della settimana in cui eseguire un backup.

Crea una pianificazione del backup

Per creare una pianificazione del backup per un database, utilizza il comando gcloud alpha firestore backups schedules create o il comando firebase firestore:databases:backups:schedules.

Crea una pianificazione giornaliera del backup

gcloud
Per creare una pianificazione giornaliera del backup, imposta il flag --recurrence su daily:
gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

Sostituisci quanto segue:

  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • RETENTION_PERIOD: imposta un valore fino a 14 settimane (14w).
interfaccia a riga di comando di Firebase
Per creare una pianificazione giornaliera del backup, imposta il flag --recurrence su DAILY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'DAILY' \
--retention RETENTION_PERIOD

Sostituisci quanto segue:

  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • RETENTION_PERIOD: imposta un valore fino a 14 settimane (14w).
Terraform
Per creare una pianificazione giornaliera del backup, crea una risorsa google_firestore_backup_schedule.
resource "google_firestore_backup_schedule" "daily-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  daily_recurrence {}
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto.
  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • Puoi anche utilizzare un riferimento delle risorse a una risorsa Terraform di tipo google_firestore_database.
  • RETENTION_PERIOD_SECONDS: imposta un valore in secondi, seguito da "s". Il valore massimo è 8467200s (14 settimane).

Crea una pianificazione settimanale del backup

gcloud
Per creare una pianificazione settimanale del backup, imposta il flag --recurrence su weekly:
gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY
Sostituisci quanto segue:
  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • RETENTION_PERIOD: imposta un valore fino a 14 settimane (14w).
  • DAY: il giorno della settimana in cui eseguire il backup. Imposta una delle seguenti opzioni:
    • SUN per domenica
    • MON per lunedì
    • TUE per martedì
    • WED per mercoledì
    • THU per giovedì
    • FRI per venerdì
    • SAT per sabato
interfaccia a riga di comando di Firebase
Per creare una pianificazione settimanale del backup, imposta il flag --recurrence su WEEKLY:
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'WEEKLY' \
--retention RETENTION_PERIOD
--day-of-week DAY
Sostituisci quanto segue:
  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • RETENTION_PERIOD: imposta un valore fino a 14 settimane (14w).
  • DAY: il giorno della settimana in cui eseguire il backup. Imposta una delle seguenti opzioni:
    • SUNDAY per domenica
    • MONDAY per lunedì
    • TUESDAY per martedì
    • WEDNESDAY per mercoledì
    • THURSDAY per giovedì
    • FRIDAY per venerdì
    • SATURDAY per sabato
Terraform
Per creare una pianificazione settimanale del backup, crea una risorsa 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
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto.
  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • Puoi anche utilizzare un riferimento delle risorse a una risorsa Terraform di tipo google_firestore_database.
  • RETENTION_PERIOD_SECONDS: imposta un valore in secondi, seguito da "s". Il valore massimo è 8467200s (14 settimane).
  • DAY: il giorno della settimana in cui eseguire il backup. Imposta una delle seguenti opzioni:
    • SUNDAY per domenica
    • MONDAY per lunedì
    • TUESDAY per martedì
    • WEDNESDAY per mercoledì
    • THURSDAY per giovedì
    • FRIDAY per venerdì
    • SATURDAY per sabato

Elenca pianificazioni backup

Per elencare tutte le pianificazioni dei backup per un database, usa uno dei seguenti metodi:

gcloud
Utilizza il comando gcloud alpha firestore backups schedules list.
gcloud alpha firestore backups schedules list \
--database='DATABASE_ID'
Sostituisci DATABASE_ID con l'ID del database. Usa '(default)' per il database predefinito.
interfaccia a riga di comando di Firebase
Usa il comando firebase firestore:backups:schedules:list.
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
Sostituisci DATABASE_ID con l'ID del database. Usa '(default)' per il database predefinito.

Descrivi la pianificazione del backup

Per recuperare le informazioni su una pianificazione del backup, utilizza uno dei seguenti metodi:

gcloud
Usa il comando gcloud alpha firestore backups schedules describe:
gcloud alpha firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
Sostituisci quanto segue:
  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • BACKUP_SCHEDULE_ID: l'ID di una pianificazione del backup. Puoi visualizzare l'ID di ogni pianificazione del backup quando elenchi tutte le pianificazioni dei backup.

Aggiorna una pianificazione del backup

Per aggiornare il periodo di conservazione di una pianificazione di backup, utilizza uno dei seguenti metodi:

gcloud
Usa il comando gcloud alpha firestore backups schedules update:
gcloud alpha firestore backups schedules update \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID \
--retention=RETENTION_PERIOD
Sostituisci quanto segue:
  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • BACKUP_SCHEDULE_ID: l'ID di una pianificazione del backup. Puoi visualizzare l'ID di ogni pianificazione del backup quando elenchi tutte le pianificazioni dei backup.
  • RETENTION_PERIOD: imposta un valore fino a 14 settimane (14w).
interfaccia a riga di comando di Firebase
Usa il comando firebase firestore:backups:schedules:update:
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
Sostituisci quanto segue:
  • BACKUP_SCHEDULE: il nome completo della risorsa di una pianificazione di backup. Puoi visualizzare il nome di ogni pianificazione del backup quando elenchi tutte le pianificazioni dei backup.
  • RETENTION_PERIOD: imposta un valore fino a 14 settimane (14w).

Puoi aggiornare il periodo di conservazione di una pianificazione di backup, ma non puoi aggiornarne la ricorrenza. Se hai bisogno di una pianificazione del backup con una ricorrenza diversa, elimina la pianificazione del backup precedente se non è più necessaria e crea una nuova pianificazione del backup con la ricorrenza desiderata.

Elimina una pianificazione del backup

Per eliminare una pianificazione del backup, utilizza uno dei seguenti metodi:

gcloud
Usa il comando gcloud alpha firestore backups schedules delete:
gcloud alpha firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
Sostituisci quanto segue:
  • DATABASE_ID: l'ID del database di cui eseguire il backup. Imposta su '(default)' per il database predefinito.
  • BACKUP_SCHEDULE_ID: l'ID di una pianificazione del backup. Puoi visualizzare l'ID di ogni pianificazione del backup quando elenchi tutte le pianificazioni dei backup.
interfaccia a riga di comando di Firebase
Usa il comando firebase firestore:backups:schedules:delete:
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
Sostituisci quanto segue:

Tieni presente che l'eliminazione di una pianificazione dei backup non eliminerà i backup già creati da questa pianificazione. Puoi attendere che scadano al termine del periodo di conservazione oppure per eliminare manualmente un backup, consulta Eliminare un backup.

Gestisci backup

Elenco dei backup

Per elencare i backup disponibili, utilizza uno dei seguenti metodi:

gcloud
Usa il comando gcloud alpha firestore backups list:
gcloud alpha firestore backups list \
--format="table(name, database, state)"
Il flag --format="table(name, database, state)" formatta l'output in un formato più leggibile. Per elencare solo i backup da una località specifica, utilizza il flag --location:
gcloud alpha firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"
Sostituisci LOCATION con il nome di una località Firestore.
interfaccia a riga di comando di Firebase
Usa il comando firebase firestore:backups:list:
firebase firestore:backups:list
Per elencare solo i backup da una posizione specifica, utilizza il flag --location:
firebase firestore:backups:list \
--location=LOCATION
Sostituisci LOCATION con il nome di una posizione Firestore.

Descrivi un backup

Per visualizzare i dettagli di un backup, utilizza uno dei seguenti metodi:

gcloud
Usa il comando gcloud alpha firestore backups describe:
gcloud alpha firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
Sostituisci quanto segue:
  • LOCATION: la posizione del database.
  • BACKUP_ID: l'ID di un backup. Puoi visualizzare l'ID di ogni backup quando elenchi tutti i backup.
interfaccia a riga di comando di Firebase
Usa il comando firebase firestore:backups:get:
firebase firestore:backups:get BACKUP
Sostituisci quanto segue:
  • BACKUP: il nome completo della risorsa di un backup. Puoi visualizzare il nome di ogni backup quando elenchi tutti i backup.

Elimina backup

Per eliminare un backup, utilizza uno dei seguenti metodi. Avviso: non puoi ripristinare un backup eliminato.
gcloud
Usa il comando gcloud alpha firestore backups delete:
gcloud alpha firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
Sostituisci quanto segue:
  • LOCATION: la posizione del database.
  • BACKUP_ID: l'ID di un backup. Puoi visualizzare l'ID di ogni backup quando elenchi tutti i backup.
interfaccia a riga di comando di Firebase
Usa il comando firebase firestore:backups:delete:
firebase firestore:backups:delete \
BACKUP
Sostituisci quanto segue:
  • BACKUP: il nome completo della risorsa di un backup. Puoi visualizzare il nome di ogni backup quando elenchi tutti i backup.

Ripristina i dati da un backup di database

Un'operazione di ripristino scrive i dati da un backup a un nuovo database Firestore.

Per avviare un'operazione di ripristino, utilizza uno dei seguenti metodi:

gcloud
Usa il comando gcloud alpha firestore databases restore:
gcloud alpha firestore databases restore \
--source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
--destination-database='DATABASE_ID'
Sostituisci quanto segue:
  • PROJECT_ID: l'ID progetto.
  • LOCATION: la località del backup del database e la località del nuovo database creato per i dati ripristinati.
  • BACKUP_ID: l'ID di un backup. Puoi visualizzare l'ID di ogni backup quando elenchi tutti i backup.
  • DATABASE_ID: un ID per il nuovo database. Non puoi utilizzare un ID database già in uso.
La modalità del database corrisponderà a quella del backup. L'output includerà i componenti metadata, name e 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
  ...
Il campo metadata include un componente progressPercentage, che descrive in dettaglio l'avanzamento stimato del ripristino fino a questo momento, e un operationState che specifica lo stato generale del ripristino. Per recuperare queste informazioni di nuovo, utilizza gcloud firestore operations list:
gcloud firestore operations list --database=DATABASE_ID
oppure, utilizzando il campo name dell'output descritto sopra, con gcloud firestore operations describe:
gcloud firestore operations describe OPERATION_NAME
interfaccia a riga di comando di Firebase
Usa il comando firebase firestore:databases:restore:
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
Sostituisci quanto segue:
  • BACKUP: il nome completo della risorsa di un backup. Puoi visualizzare il nome di ogni backup quando elenchi tutti i backup.
  • DATABASE_ID: un ID per il nuovo database. Non puoi utilizzare un ID database già in uso.
La modalità del database corrisponderà a quella del backup.