Utilizzare il recupero point-in-time (PITR)
Questa pagina descrive come utilizzare il recupero point-in-time (PITR) per conservare e recuperare i dati in Firestore con compatibilità MongoDB.
Per comprendere i concetti di PITR, consulta Recupero point-in-time.
Autorizzazioni
Per ottenere le autorizzazioni necessarie per gestire le impostazioni PITR, chiedi all'amministratore di concederti il ruolo IAM Cloud Datastore Owner (roles/datastore.owner) sul progetto di cui vuoi attivare le impostazioni PITR.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene le autorizzazioni necessarie per gestire le impostazioni PITR. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per gestire le impostazioni PITR sono necessarie le seguenti autorizzazioni:
-
Per attivare PITR durante la creazione di un database:
datastore.databases.create -
Per aggiornare le impostazioni PITR sul database esistente:
datastore.databases.update,datastore.databases.list -
Per eseguire letture dai dati PITR:
datastore.databases.get,datastore.entities.get,datastore.entities.list -
Per esportare i dati PITR:
datastore.databases.export -
Per importare i dati PITR:
datastore.databases.import -
Per clonare un database:
datastore.databases.clone
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Prima di iniziare
Prima di iniziare a utilizzare il PITR, tieni presente quanto segue:
- Non puoi iniziare a leggere da sette giorni prima immediatamente dopo aver attivato il PITR.
- Se vuoi attivare il PITR quando crei un database, devi utilizzare il comando
gcloud firestore databases create. L'attivazione del PITR durante la creazione di un database utilizzando la console Google Cloud non è supportata. - Firestore con compatibilità MongoDB inizia a conservare le versioni dal momento in cui viene abilitato PITR.
- Non puoi leggere i dati PITR nella finestra PITR dopo aver disattivato PITR.
- Se riattivi PITR immediatamente dopo averlo disattivato, i dati PITR passati non sono più disponibili. I dati PITR creati prima della disattivazione del PITR verranno eliminati dopo la data di scadenza del PITR.
- Se hai eliminato accidentalmente dei dati nell'ultima ora e il PITR è disattivato, puoi ripristinarli attivando il PITR entro un'ora dall'eliminazione.
- Qualsiasi lettura eseguita su dati PITR scaduti non riesce.
Abilita PITR
Prima di utilizzare PITR, attiva la fatturazione per il tuo progetto Google Cloud. Solo i progetti Google Cloud con la fatturazione abilitata possono utilizzare la funzionalità PITR.
Per abilitare il PITR per il tuo database:
Console
Nella console Google Cloud , vai alla pagina Database.
Seleziona il database richiesto dall'elenco.
Nel menu di navigazione, fai clic su Disaster Recovery.
Fai clic su Modifica per modificare le impostazioni.
Seleziona la casella di controllo Abilita il recupero point-in-time e poi fai clic su Salva.
L'abilitazione del PITR comporta costi di archiviazione. Per saperne di più, consulta la sezione Prezzi.
Per disattivare il recupero point-in-time, deseleziona la casella di controllo Abilita recupero point-in-time nella pagina Disaster Recovery della console Google Cloud .
gcloud
Attiva PITR durante la creazione del database con i comandi gcloud firestore databases create e --enable-ptir nel seguente modo:
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--edition=enterprise\
--enable-pitr
Sostituisci i valori nel seguente modo:
LOCATION: la località in cui vuoi creare il database.DATABASE_ID: impostalo su un ID database.
Puoi disattivare il ripristino temporizzato utilizzando il comando gcloud firestore databases update come segue:
gcloud firestore databases update\
--database=DATABASE_ID\
--no-enable-pitr
Sostituisci i valori nel seguente modo:
DATABASE_ID: impostato sull'ID database o (impostazione predefinita).
Recuperare il periodo di conservazione e l'ora della prima versione
Console
Nella console Google Cloud , vai alla pagina Database.
Seleziona il database richiesto dall'elenco.
Nel menu di navigazione, fai clic su Disaster Recovery.
Nella sezione Impostazioni, prendi nota del Periodo di conservazione e dell'Ora della prima versione.
- Periodo di conservazione: il periodo in cui Firestore con compatibilità MongoDB conserva tutte le versioni dei dati per il database. Il valore è di un'ora quando il PITR è disabilitato e di sette giorni quando è abilitato.
- Ora della versione meno recente: il timestamp meno recente in cui è possibile leggere le versioni precedenti dei dati nella finestra PITR. Questo valore viene aggiornato continuamente da Firestore con compatibilità MongoDB e diventa obsoleto nel momento in cui viene eseguita una query. Se utilizzi questo valore per recuperare i dati, assicurati di tenere conto del tempo che intercorre tra il momento in cui viene eseguita la query sul valore e il momento in cui avvii il recupero.
- Recupero point-in-time: mostra
Enabledse il recupero point-in-time è abilitato. Se il recupero point-in-time è disattivato, vedraiDisabled.
gcloud
Esegui il comando gcloud firestore databases describe nel modo seguente:
gcloud firestore databases describe --database=DATABASE_ID
Sostituisci DATABASE_ID con l'ID database o '(default)'.
Ecco l'output:
appEngineIntegrationMode: ENABLED
concurrencyMode: PESSIMISTIC
createTime: '2021-03-24T17:02:35.234Z'
deleteProtectionState: DELETE_PROTECTION_DISABLED
earliestVersionTime: '2023-06-12T16:17:25.222474Z'
etag: IIDayqOevv8CMNTvyNK4uv8C
keyPrefix: s
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
dove
earliestVersionTime: timestamp dei dati PITR meno recenti archiviati.pointInTimeRecoveryEnablement: mostraPOINT_IN_TIME_RECOVERY_ENABLED, se il PITR è abilitato. Se PITR è disattivato, vedraiPOINT_IN_TIME_RECOVERY_DISABLEDo il campopointInTimeRecoveryEnablementpotrebbe non essere visualizzato.versionRetentionPeriod: periodo di tempo per il quale i dati PITR vengono conservati in millisecondi. Il valore può essere un'ora se il PITR è disabilitato o sette giorni se è abilitato.
Leggere i dati PITR
Puoi leggere i dati PITR utilizzando la sessione di snapshot in vari driver client MongoDB. Imposta un snapshotTimestamp sulla sessione. L'esempio seguente utilizza
il driver Java MongoDB e una funzionalità simile è disponibile in altri driver:
Java
var session =
mongoClient.startSession(ClientSessionOptions.builder().snapshot(true).build());
session.setSnapshotTimestamp(new BsonTimestamp(seconds, nanos));
// run a find query with PITR timestamp
collection.find(session, <filter>).toList();
// run an aggregation query pipeline with PITR timestamp
collection.aggregate(session, <aggregation pipeline stages>).toList();
// run distinct command with PITR timestamp
collection.distinct(session, <field>, <return value type class>).toList();
In MongoDB, BsonTimestamp è un tipo BSON interno a MongoDB
di 64 bit. I primi 32 bit rappresentano i secondi del timestamp dell'epoca e gli ultimi 32 bit rappresentano un conteggio delle operazioni ordinali all'interno di un cluster MongoDB.
In Firestore con compatibilità MongoDB, il timestamp dello snapshot, che utilizza ancora un tipo di valore BsonTimestamp, interpreta i primi 32 bit come secondi del timestamp Unix, ma gli ultimi 32 bit come nanosecondi all'interno del secondo. Tieni presente
che non tutti gli snapshot PITR con precisione al nanosecondo sono supportati. Sono consentiti timestamp in microsecondi
nell'ultima ora e timestamp di minuti interi degli ultimi 7
giorni. Consulta la
panoramica del recupero point-in-time (PITR)
per i timestamp di lettura supportati.
Clonare da un database
Puoi clonare un database esistente in un nuovo database in un timestamp selezionato:
Il database clonato è un nuovo database che verrà creato nella stessa posizione del database di origine.
Per creare un clone, Firestore utilizza i dati di recupero point-in-time (PITR) del database di origine. Il database clonato include tutti i dati e gli indici.
Per impostazione predefinita, il database clonato verrà criptato nello stesso modo del database di origine, utilizzando la crittografia predefinita di Google o la crittografia CMEK. Puoi specificare un tipo di crittografia diverso o utilizzare una chiave diversa per la crittografia CMEK.
Il timestamp ha una granularità di un minuto e specifica un punto nel tempo nel passato, nel periodo definito dalla finestra PITR:
- Se il PITR è abilitato per il tuo database, puoi selezionare qualsiasi minuto degli ultimi 7 giorni (o meno se il PITR è stato abilitato meno di 7 giorni fa).
- Se il PITR non è abilitato, puoi selezionare qualsiasi minuto dell'ultima ora.
- Puoi controllare il timestamp meno recente che puoi scegliere nella descrizione del database.
Console
Nella console Google Cloud , vai alla pagina Database.
Fai clic su Visualizza altro nella riga della tabella per il database che vuoi clonare. Fai clic su Clona. Viene visualizzata la finestra di dialogo Crea un clone.
Nella finestra di dialogo Crea un clone, fornisci i parametri per la clonazione del database:
Nel campo Assegna un ID al clone, inserisci un ID database per un nuovo database clonato. Questo ID database non deve essere associato a un database esistente.
Nel campo Clona da, seleziona un momento specifico da utilizzare per la clonazione. L'ora selezionata corrisponde a un timestamp PITR con granularità al minuto.
Fai clic su Crea clone.
gcloud
Utilizza il comando
gcloud firestore databases clone
per clonare un database:
gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'
Sostituisci quanto segue:
SOURCE_DATABASE: il nome del database di un database esistente che vuoi clonare. Il nome utilizza il formato
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.PITR_TIMESTAMP: un timestamp PITR nel formato RFC 3339, con granularità al minuto. Ad esempio:
2025-06-01T10:20:00.00Zo2025-06-01T10:30:00.00-07:00.DESTINATION_DATABASE_ID: un ID database per un nuovo database clonato. Questo ID database non deve essere associato a un database esistente.
Esempio:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'
Se vuoi eseguire il binding ad alcuni tag durante la clonazione di un database, utilizza il comando precedente con il flag --tags, che è un elenco facoltativo di coppie KEY=VALUE di tag a cui eseguire il binding.
Esempio:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--tags=key1=value1,key2=value2
Per impostazione predefinita, il database clonato avrà la stessa configurazione di crittografia
del database di origine. Per modificare la configurazione della crittografia, utilizza l'argomento
--encryption-type:
- (Predefinito)
use-source-encryption: utilizza la stessa configurazione di crittografia del database di origine. google-default-encryption: utilizza la crittografia predefinita di Google.customer-managed-encryption: utilizza la crittografia CMEK. Specifica un ID chiave nell'argomento--kms-key-name.
L'esempio seguente mostra come configurare la crittografia CMEK per il database clonato:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'
Interfaccia a riga di comando di Firebase
Utilizza il comando firebase firestore:databases:clone per clonare un database:
firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'
Sostituisci quanto segue:
SOURCE_DATABASE: il nome del database di un database esistente che vuoi clonare. Il nome utilizza il formato
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.DESTINATION_DATABASE: un nome di database per un nuovo database clonato. Il nome utilizza il formato
projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID. Il nome del database non deve essere associato a un database esistente.PITR_TIMESTAMP: un timestamp PITR nel formato RFC 3339, con granularità al minuto. Ad esempio:
2025-06-01T10:20:00.00Zo2025-06-01T10:30:00.00-07:00. Se non specificato, l'istantanea scelta sarà l'ora corrente, arrotondata al minuto.
Per impostazione predefinita, il database clonato avrà la stessa configurazione di crittografia
del database di origine. Per modificare la configurazione della crittografia, utilizza l'argomento
--encryption-type:
- (Predefinito)
USE_SOURCE_ENCRYPTION: utilizza la stessa configurazione di crittografia del database di origine. GOOGLE_DEFAULT_ENCRYPTION: utilizza la crittografia predefinita di Google.CUSTOMER_MANAGED_ENCRYPTION: utilizza la crittografia CMEK. Specifica un ID chiave nell'argomento--kms-key-name.
L'esempio seguente mostra come configurare la crittografia CMEK per il database clonato:
firebase firestore:databases:clone \
'projects/example-project/databases/(default)' \
'projects/example-project/databases/example-dest-db' \
--snapshot-time 'PITR_TIMESTAMP' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION
Esportare e importare dai dati PITR
Puoi esportare il database in Cloud Storage dai dati PITR
utilizzando il comando gcloud firestore export. Puoi esportare i dati PITR in cui il timestamp è un timestamp di un minuto intero negli ultimi sette giorni, ma non prima del giorno earliestVersionTime. Se i dati non esistono più al timestamp specificato, l'operazione di esportazione non va a buon fine.
L'operazione di esportazione PITR supporta tutti i filtri, inclusa l'esportazione di tutti i documenti e l'esportazione di raccolte specifiche.
Esporta il database specificando il parametro
snapshot-timeper il timestamp di recupero scelto.gcloud
Esegui questo comando per esportare il database nel tuo bucket.
gcloud firestore export gs://BUCKET_NAME_PATH \ --snapshot-time=PITR_TIMESTAMP \ --collection-ids=COLLECTION_IDSSostituisci quanto segue:
BUCKET_NAME_PATH: un bucket Cloud Storage valido con un prefisso del percorso facoltativo in cui sono archiviati i file di esportazione.PITR_TIMESTAMP: un timestamp PITR con granularità al minuto, ad esempio2023-05-26T10:20:00.00Zo2023-10-19T10:30:00.00-07:00.COLLECTION_IDS: un elenco di ID raccolta o ID gruppo di raccolte, ad esempio'specific-collection-group1','specific-collection-group2'.
Tieni presente quanto segue prima di esportare i dati PITR:
- Specifica il timestamp nel formato RFC 3339.
Ad esempio,
2023-05-26T10:20:00.00Zo2023-10-19T10:30:00.00-07:00. - Assicurati che il timestamp specificato sia un timestamp di un minuto intero
negli ultimi sette giorni, ma non precedente al
earliestVersionTime. Se i dati non esistono più al timestamp specificato, viene generato un errore. Il timestamp deve essere un minuto intero, anche se l'ora specificata rientra nell'ultima ora. - Non ti viene addebitato alcun costo per un'esportazione PITR non riuscita.
Importa in un database.
Segui i passaggi descritti in Importare tutti i documenti per importare il database esportato. Se nel database esiste già un documento, questo verrà sovrascritto.