Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt (Point-in-Time Recovery, PITR) Daten in Firestore im Datastore-Modus aufbewahren und wiederherstellen.
Informationen zu den PITR-Konzepten finden Sie unter Wiederherstellung zu einem bestimmten Zeitpunkt.
Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die
Cloud Datastore-Inhaber (roles/datastore.owner) IAM-Rolle für das Projekt zu gewähren, dessen PITR-Einstellungen Sie aktivieren möchten, um die Berechtigungen zu erhalten, die
Sie zum Verwalten von PITR-Einstellungen benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Verwalten von PITR-Einstellungen erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen , um die notwendigen Berechtigungen anzuzeigen, die erforderlich sind:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um PITR-Einstellungen zu verwalten:
-
So aktivieren Sie PITR beim Erstellen einer Datenbank:
datastore.databases.create -
So aktualisieren Sie die PITR-Einstellungen für eine vorhandene Datenbank:
datastore.databases.update,datastore.databases.list -
So führen Sie Lesevorgänge für PITR-Daten aus:
datastore.databases.get,datastore.entities.get,datastore.entities.list,datastore.namespaces.get,datastore.namespaces.list,datastore.statistics.get,datastore.statistics.list -
So exportieren Sie PITR-Daten:
datastore.databases.export -
So importieren Sie PITR-Daten:
datastore.databases.import
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Hinweis
Beachten Sie die folgenden Punkte, bevor Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden:
- Sie können nicht sofort nach dem Aktivieren von PITR mit dem Lesen von Daten beginnen, die sieben Tage in der Vergangenheit liegen.
- Wenn Sie PITR beim Erstellen einer Datenbank aktivieren möchten, müssen Sie den Befehl
gcloud firestore databases createverwenden. Das Aktivieren von PITR beim Erstellen einer Datenbank mit der Google Cloud Console wird nicht unterstützt. - Im Datastore-Modus werden Versionen ab dem Zeitpunkt nach dem Aktivieren von PITR aufbewahrt.
- Sie können PITR-Daten im PITR-Fenster nicht lesen, nachdem Sie PITR deaktiviert haben.
- Wenn Sie PITR sofort nach dem Deaktivieren wieder aktivieren, sind die bisherigen PITR-Daten nicht mehr verfügbar. Alle PITR-Daten, die vor dem Deaktivieren von PITR erstellt wurden, werden nach dem Ablaufdatum von PITR gelöscht.
- Wenn Sie in der letzten Stunde versehentlich Daten gelöscht haben und PITR deaktiviert ist, können Sie Ihre Daten wiederherstellen, indem Sie PITR innerhalb einer Stunde nach dem Löschen aktivieren.
- Alle Lesevorgänge für abgelaufene PITR-Daten schlagen fehl.
PITR aktivieren
Aktivieren Sie die Abrechnung für Ihr Projekt Google Cloud, bevor Sie PITR verwenden. Nur Google Cloud Projekte, für die die Abrechnung aktiviert ist, können die PITR-Funktion verwenden.
So aktivieren Sie PITR für Ihre Datenbank:
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.
Klicken Sie auf Bearbeiten , um die Einstellungen zu bearbeiten.
Klicken Sie auf das Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren und dann auf Speichern.
Durch das Aktivieren von PITR entstehen Speicherkosten. Weitere Informationen finden Sie unter Preise.
Wenn Sie PITR deaktivieren möchten, entfernen Sie das Häkchen aus dem Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren auf der Seite „Notfallwiederherstellung“ in der Google Cloud Console.
gcloud
Aktivieren Sie PITR beim Erstellen der Datenbank mit dem gcloud firestore databases create Befehl so:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
Ersetzen Sie die Werte so:
LOCATION: der Standort, an dem Sie Ihre Datenbank erstellen möchten.DATABASE_ID: auf die Datenbank-ID oder ` (default)` festgelegt.TYPE: auf „datastore-mode“ festgelegt.
Sie können PITR mit dem gcloud firestore databases update Befehl so deaktivieren:
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
Ersetzen Sie die Werte so:
DATABASE_ID: auf die Datenbank-ID oder ` (default)` festgelegt.
Aufbewahrungszeitraum und früheste Version abrufen
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.
Notieren Sie sich im Abschnitt Einstellungen die Werte für Aufbewahrungsdauer und Früheste Version.
- Aufbewahrungszeitraum: der Zeitraum, in dem im Datastore-Modus alle Datenversionen für die Datenbank aufbewahrt werden. Der Wert beträgt eine Stunde, wenn PITR deaktiviert ist, und sieben Tage, wenn PITR aktiviert ist.
- Früheste Version: der früheste Zeitstempel, zu dem frühere Versionen von Daten im PITR-Fenster gelesen werden können. Dieser Wert wird im Datastore-Modus kontinuierlich aktualisiert und ist in dem Moment veraltet, in dem er abgefragt wird. Wenn Sie diesen Wert zum Wiederherstellen von Daten verwenden, müssen Sie die Zeit zwischen dem Abfragen des Werts und dem Starten der Wiederherstellung berücksichtigen.
- Wiederherstellung zu einem bestimmten Zeitpunkt: zeigt
Enabledan, wenn PITR aktiviert ist. Wenn PITR deaktiviert ist, wirdDisabledangezeigt.
gcloud
Führen Sie den Befehl gcloud firestore databases describe so aus:
gcloud firestore databases describe --database=DATABASE_ID
Ersetzen Sie DATABASE_ID durch die Datenbank-ID oder (default).
Hier ist die Ausgabe:
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/(default)
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: DATASTORE_MODE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
Dabei gilt:
earliestVersionTime: Zeitstempel der frühesten gespeicherten PITR-Daten.pointInTimeRecoveryEnablement: zeigtPOINT_IN_TIME_RECOVERY_ENABLEDan, wenn PITR aktiviert ist. Wenn PITR deaktiviert ist, wird entwederPOINT_IN_TIME_RECOVERY_DISABLEDangezeigt oder das FeldpointInTimeRecoveryEnablementwird nicht angezeigt.versionRetentionPeriod: Zeitraum, in dem PITR-Daten in Millisekunden aufbewahrt werden. Der Wert kann eine Stunde sein, wenn PITR deaktiviert ist, oder sieben Tage, wenn PITR aktiviert ist.
PITR-Daten lesen
Sie können PITR-Daten mit den Clientbibliotheken, REST API-Methoden oder dem FirestoreIO Apache Beam-Connector lesen.
Clientbibliotheken
Java
Sie müssen die Methode readTime in der Klasse ReadOption verwenden, um PITR-Daten zu lesen. Sie können die Transaktion ReadOnly nicht verwenden, um Lesevorgänge auszuführen.
Weitere Informationen finden Sie im Beispielcode für ReadOption.
Datastore datastore = ...
Timestamp timestamp = ...
// lookup
Key key = ...
Entity entity = datastore.get(key, ReadOption.readTime(timestamp));
// runQuery
Query<Entity> query = ...
QueryResults<Entity> queryResult = datastore.run(query, ReadOption.readTime(timestamp));
// runAggregationQuery
AggregationQuery countAggregationQuery = ...
Long count = getOnlyElement(datastore.runAggregation(countAggregationQuery, ReadOption.readTime(timestamp))).get("total_count");
Eine vollständige Liste der readTime-Beispiele finden Sie im GitHub-Repository.
Python
Verwenden Sie PITR-Lesevorgänge im Datastore-Modus Python SDK mit der Methode readTime oder verwenden Sie die Transaktion ReadOnly mit readTime, um Lesevorgänge auszuführen.
from datetime import datetime, timezone
read_time = datetime.now(tz=timezone.utc)
key = …
# read without PITR read time
entity = client.get(key)
# read with PITR read time
entity = client.get(key, read_time=read_time)
# PITR read using read_only transaction
with client.transaction(read_only=True, read_time=read_time):
entity = client.get(key)
query = client.query…
# run query without PITR read time
iterator = query.fetch()
# run query with PITR read time
iterator = query.fetch(read_time=read_time)
# PITR read query using read_only transaction
with client.transaction(read_only=True, read_time=read_time):
iterator = query.fetch()
Eine vollständige Liste der readTime-Beispiele finden Sie im GitHub-Repository.
REST API
PITR-Lesevorgänge werden in den Datastore-Modus V1-Lesemethoden unterstützt: lookup, runQuery und runAggregationQuery.
Führen Sie einen Lesevorgang mit den REST-Methoden aus, indem Sie eine der folgenden Optionen verwenden:
Übergeben Sie in der Anfrage Ihrer Lesemethode den Wert
readTimeals unterstützten PITR-Zeitstempel in der MethodereadOptions. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Mikrosekunden-Genauigkeit innerhalb der letzten Stunde oder ein Zeitstempel mit Minutengenauigkeit außerhalb der letzten Stunde sein, aber nicht früher alsearliestVersionTime.Verwenden Sie den
readTimeParameter zusammen mit derBeginTransactionMethode als Teil einerReadOnlyTransaktion für mehrere Wiederherstellung zu einem bestimmten Zeitpunkt-Lesevorgänge.
Apache Beam
Verwenden Sie den Datastore-Modus IO Apache Beam-Connector, um Entitäten im Datastore-Modus in großem Maßstab mit Dataflow zu lesen oder zu schreiben.
Geben Sie die withReadTime(Instant readTime) Methode für das DatastoreV1.Read Objekt an. Alle nachfolgenden Lesevorgänge mit dem Objekt DatastoreV1.Read lesen aus derselben readTime.
Java
Der folgende Code zeigt, wie die Methode withReadTime für PITR-Lesevorgänge verwendet wird.
com.google.datastore.v1.Query query = ...
Instant readTime = Instant.ofEpochSecond(1684098540L);
DatastoreV1.Read read =
DatastoreIO.v1()
.read()
.withProjectId(project)
.withQuery(query)
.withNamespace(namespace)
.withReadTime(readTime);
PCollection<Entity> entities = pipeline.apply(read);
...
Eine vollständige Liste der withReadTime-Beispiele finden Sie im GitHub-Repository.
Aus einer Datenbank klonen
Sie können eine vorhandene Datenbank zu einem ausgewählten Zeitstempel in eine neue Datenbank klonen:
Die geklonte Datenbank ist eine neue Datenbank, die am selben Standort wie die Quelldatenbank erstellt wird.
Zum Klonen verwendet Firestore Daten zur Wiederherstellung zu einem bestimmten Zeitpunkt (PITR) der Quelldatenbank. Die geklonte Datenbank enthält alle Daten und Indexe.
Standardmäßig wird die geklonte Datenbank auf dieselbe Weise wie die Quelldatenbank verschlüsselt, entweder mit der Standardverschlüsselung von Google oder mit der CMEK-Verschlüsselung. Sie können einen anderen Verschlüsselungstyp angeben oder einen anderen Schlüssel für die CMEK-Verschlüsselung verwenden.
Der Zeitstempel hat eine Genauigkeit von einer Minute und gibt einen Zeitpunkt in der Vergangenheit an, im Zeitraum, der durch das PITR-Fensterdefiniert ist:
- Wenn PITR für Ihre Datenbank aktiviert ist, wählen Sie eine beliebige Minute der letzten 7 Tage aus (oder weniger, wenn PITR vor weniger als 7 Tagen aktiviert wurde).
- Wenn PITR nicht aktiviert ist, können Sie eine beliebige Minute der letzten Stunde auswählen.
- Den frühesten Zeitstempel, den Sie auswählen können, finden Sie in der Beschreibung Ihrer Datenbank.
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Klicken Sie in der Tabellenzeile für die Datenbank, die Sie klonen möchten, auf Weitere Optionen. Klicken Sie auf Klonen. Das Dialogfeld Klon erstellen wird angezeigt.
Geben Sie im Dialogfeld Klon erstellen die Parameter für das Klonen der Datenbank an:
Geben Sie im Feld Klon eine ID zuweisen eine Datenbank-ID für eine neue geklonte Datenbank ein. Diese Datenbank-ID darf nicht mit einer vorhandenen Datenbank verknüpft sein.
Wählen Sie im Feld Klonen ab einen Zeitpunkt für das Klonen aus. Die ausgewählte Zeit entspricht einem PITR-Zeitstempel mit Minutengenauigkeit.
Klicken Sie auf Klon erstellen.
gcloud
Verwenden Sie den
gcloud firestore databases clone
Befehl, um eine Datenbank zu klonen:
gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'
Ersetzen Sie Folgendes:
SOURCE_DATABASE: der Datenbankname einer vorhandenen Datenbank, die Sie klonen möchten. Der Name hat das Format
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.PITR_TIMESTAMP: ein PITR-Zeitstempel im RFC 3339-Format mit Minutengenauigkeit. Beispiel:
2025-06-01T10:20:00.00Zoder2025-06-01T10:30:00.00-07:00.DESTINATION_DATABASE_ID: eine Datenbank-ID für eine neue geklonte Datenbank. Diese Datenbank-ID darf nicht mit einer vorhandenen Datenbank verknüpft sein.
Beispiel:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'
Verschlüsselungskonfiguration der geklonten Datenbank ändern
Standardmäßig hat die geklonte Datenbank dieselbe Verschlüsselungskonfiguration wie die Quelldatenbank. Verwenden Sie das Argument --encryption-type, um die Verschlüsselungskonfiguration zu ändern:
- (Standard)
use-source-encryption: dieselbe Verschlüsselungskonfiguration wie die Quelldatenbank verwenden. google-default-encryption: die Standardverschlüsselung von Google verwenden.customer-managed-encryption: CMEK-Verschlüsselung verwenden. Geben Sie eine Schlüssel-ID im--kms-key-nameArgument an.
Das folgende Beispiel zeigt, wie die CMEK-Verschlüsselung für die geklonte Datenbank konfiguriert wird:
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'
Aus PITR-Daten exportieren und importieren
Sie können Ihre Datenbank mit dem gcloud firestore export Befehl aus PITR-Daten in Cloud Storage exportieren. Sie können PITR-Daten exportieren, deren Zeitstempel ein Zeitstempel mit Minutengenauigkeit innerhalb der letzten sieben Tage ist, aber nicht früher als earliestVersionTime. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, schlägt der Exportvorgang fehl.
Der PITR-Exportvorgang unterstützt alle Filter, einschließlich des Exports aller Entitäten und des Exports bestimmter Arten oder Namespaces.
Exportieren Sie die Datenbank und geben Sie den Parameter
snapshot-timefür den erforderlichen Wiederherstellungszeitstempel an.gcloud
Führen Sie den folgenden Befehl aus, um die Datenbank in Ihren Bucket zu exportieren.
gcloud firestore export gs://[BUCKET_NAME_PATH] \ --snapshot-time=[PITR_TIMESTAMP] \ --collection-ids=[COLLECTION_IDS] \ --namespace-ids=[NAMESPACE_IDS]Dabei gilt:
BUCKET_NAME_PATH: ein gültiger Cloud Storage-Bucket mit einem optionalen Pfadpräfix, in dem Exportdateien gespeichert werden.PITR_TIMESTAMP: ein PITR-Zeitstempel mit Minutengenauigkeit, z. B.2023-05-26T10:20:00.00Zoder2023-10-19T10:30:00.00-07:00.COLLECTION_IDS: eine Liste von Sammlungs-IDs oder Sammlungsgruppen-IDs, z. B.'specific collection group1','specific collection group2'.NAMESPACE_IDS: eine Liste von Namespace-IDs, z. B.'customer','orders'.
Der Export einer bestimmten Teilmenge von Arten und/oder Namespaces mit einem Entitätsfilter wird ebenfalls unterstützt.
Beachten Sie die folgenden Punkte, bevor Sie PITR-Daten exportieren:
- Geben Sie den Zeitstempel im RFC 3339
Format an.
Beispiel:
2023-05-26T10:20:00.00Zoder2023-10-19T10:30:00.00-07:00. - Der angegebene Zeitstempel muss ein Zeitstempel mit Minutengenauigkeit innerhalb der letzten sieben Tage sein, aber nicht früher als
earliestVersionTime. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, erhalten Sie eine Fehlermeldung. Der Zeitstempel muss eine ganze Minute sein, auch wenn die angegebene Zeit innerhalb der letzten Stunde liegt. - Für einen fehlgeschlagenen PITR-Export werden keine Kosten in Rechnung gestellt.
In eine Datenbank importieren.
Folgen Sie der Anleitung unter Alle Entitäten importieren , um Ihre exportierte Datenbank zu importieren. Wenn eine Entität bereits in Ihrer Datenbank vorhanden ist, wird sie überschrieben. Der Import einer bestimmten Teilmenge von Arten und/oder Namespaces mit einem Entitätsfilter wird ebenfalls unterstützt.