Auf dieser Seite wird beschrieben, wie Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden, um Daten in Firestore im Datastore-Modus aufzubewahren und wiederherzustellen.
Weitere Informationen zu PITR-Konzepten finden Sie unter Wiederherstellung zu einem bestimmten Zeitpunkt.
Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Datastore-Inhaber (roles/datastore.owner
) für das Projekt zu gewähren, dessen PITR-Einstellungen Sie aktivieren möchten, um die Berechtigungen zu erhalten, die Sie zum Verwalten der PITR-Einstellungen benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Verwalten der PITR-Einstellungen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um die 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 aus 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
Möglicherweise können Sie diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Hinweise
Beachten Sie die folgenden Punkte, bevor Sie mit der Verwendung von PITR beginnen:
- Sie können nicht sofort nach dem Aktivieren der PITR mit dem Lesen der sieben Tage in der Vergangenheit beginnen.
- Wenn Sie PITR beim Erstellen einer Datenbank aktivieren möchten, müssen Sie den Befehl
gcloud firestore databases create
verwenden. Das Aktivieren von PITR beim Erstellen einer Datenbank mit der Google Cloud Console wird nicht unterstützt. - Nach dem Aktivieren von PITR werden im Datastore-Modus Versionen ab dem Zeitpunkt beibehalten.
- Nachdem Sie PITR deaktiviert haben, können Sie im PITR-Fenster keine PITR-Daten mehr lesen.
- Wenn Sie PITR sofort nach der Deaktivierung wieder aktivieren, sind die früheren PITR-Daten nicht mehr verfügbar. Alle PITR-Daten, die vor der Deaktivierung von PITR erstellt wurden, werden nach dem Ablaufdatum der 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.
- Jeder Lesevorgang für abgelaufene PITR-Daten schlägt fehl.
PITR aktivieren
Bevor Sie PITR verwenden, aktivieren Sie die Abrechnung für Ihr Google Cloud-Projekt. Das PITR-Feature kann nur in Google Cloud-Projekten mit aktivierter Abrechnung verwendet werden.
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.
Das Aktivieren von PITR würde Speicherkosten verursachen. Weitere Informationen finden Sie unter Preise.
Zum Deaktivieren der Wiederherstellung zu einem bestimmten Zeitpunkt entfernen Sie in der Google Cloud Console auf der Seite „Notfallwiederherstellung“ das Häkchen aus dem Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren.
gcloud
Aktivieren Sie PITR während der Datenbankerstellung mit dem Befehl gcloud firestore databases create
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
ist der Ort, an dem Sie die Datenbank erstellen möchten.DATABASE_ID
: auf die Datenbank-ID oder (Standard) festgelegtTYPE
– auf den Datastore-Modus festgelegt.
Sie können PITR mit dem Befehl gcloud firestore databases update
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 (Standard) festgelegt
Aufbewahrungsdauer und früheste Versionszeit 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.
Beachten Sie im Bereich Einstellungen die Werte für Aufbewahrungsdauer und Frühestmöglicher Versionszeitpunkt.
- Aufbewahrungsdauer: Der Zeitraum, in dem im Datastore-Modus alle Versionen der Daten für die Datenbank aufbewahrt werden. Der Wert beträgt eine Stunde, wenn PITR deaktiviert ist, und sieben Tage, wenn PITR aktiviert ist.
- Frühester Versionszeitpunkt: der früheste Zeitstempel, zu dem frühere Versionen der Daten im PITR-Fenster gelesen werden können. Dieser Wert wird vom Datastore-Modus kontinuierlich aktualisiert und ist bei der Abfrage veraltet. Wenn Sie diesen Wert zum Wiederherstellen von Daten verwenden, müssen Sie die Zeit ab dem Zeitpunkt der Abfrage des Werts bis zum Start der Wiederherstellung berücksichtigen.
- Wiederherstellung zu einem bestimmten Zeitpunkt: Bei aktivierter Wiederherstellung zu einem bestimmten Zeitpunkt wird
Enabled
angezeigt. Wenn PITR deaktiviert ist, wirdDisabled
angezeigt.
gcloud
Führen Sie den Befehl gcloudfirestore databases describe wie folgt 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_ENABLED
an, wenn PITR aktiviert ist. Wenn PITR deaktiviert ist, wird entwederPOINT_IN_TIME_RECOVERY_DISABLED
angezeigt oder das FeldpointInTimeRecoveryEnablement
wird möglicherweise nicht angezeigt.versionRetentionPeriod
ist der Zeitraum in Millisekunden, für den PITR-Daten 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 Firestore-Apache Beam-Connector von Firestore aus lesen.
Clientbibliotheken
Java
Sie müssen die Methode readTime
in der Klasse ReadOption
verwenden, um PITR-Daten zu lesen. Sie können die ReadOnly
-Transaktion nicht zum Ausführen von Lesevorgängen verwenden.
Weitere Informationen finden Sie im ReadOption-Beispielcode.
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 den PITR-Lesevorgang im Python SDK im Datastore-Modus 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.
REST API
PITR-Lesevorgänge werden in den Lesemethoden lookup, runQuery und runAggregationQuery unterstützt.
Versuchen Sie es mit einer der folgenden Optionen, um einen Lesevorgang mit den REST-Methoden durchzuführen:
Übergeben Sie in der Anfrage zur Lesemethode den Wert
readTime
als unterstützten PITR-Zeitstempel in diereadOptions
-Methode. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit einer Genauigkeit von Mikrosekunden innerhalb der letzten Stunde oder ein Zeitstempel für eine ganze Minute nach der letzten Stunde, aber nicht vor demearliestVersionTime
sein.Verwenden Sie den Parameter
readTime
zusammen mit der MethodeBeginTransaction
im Rahmen einerReadOnly
-Transaktion für mehrere PITR-Lesevorgänge.
apache beam
Den Apache Beam-Connector für E/A im Datastore-Modus verwenden, um mit Dataflow in großem Umfang Entitäten in einer Datenbank im Datastore-Modus zu lesen oder zu schreiben.
Geben Sie die Methode withReadTime(Instant readTime)
für das Objekt DatastoreV1.Read
an. Alle nachfolgenden Lesevorgänge mit dem DatastoreV1.Read
-Objekt 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.
Aus PITR-Daten exportieren und importieren
Mit dem Befehl gcloud firestore export
können Sie die Datenbank aus PITR-Daten nach Cloud Storage exportieren. Sie können PITR-Daten exportieren, bei denen der Zeitstempel ein Zeitstempel für eine ganze Minute innerhalb der letzten sieben Tage, aber nicht vor dem earliestVersionTime
ist. Wenn die Daten zum angegebenen Zeitstempel nicht 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. Geben Sie dabei den Parameter
snapshot-time
für den erforderlichen Zeitstempel für die Wiederherstellung 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 sind.PITR_TIMESTAMP
: ein PITR-Zeitstempel im Minutentakt, z. B.2023-05-26T10:20:00.00Z
oder2023-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 vor dem Exportieren der PITR-Daten die folgenden Punkte:
- Geben Sie den Zeitstempel im RFC 3339-Format an.
Beispiel:
2023-05-26T10:20:00.00Z
oder2023-10-19T10:30:00.00-07:00
- Achten Sie darauf, dass der von Ihnen angegebene Zeitstempel ein Zeitstempel einer ganzen Minute innerhalb der letzten sieben Tage ist, aber nicht vor dem
earliestVersionTime
liegt. 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 in der letzten Stunde liegt. - Ein fehlgeschlagener PITR-Export wird Ihnen nicht in Rechnung gestellt.
In eine Datenbank importieren.
Führen Sie die Schritte unter Alle Entitäten importieren aus, um die exportierte Datenbank zu importieren. Wenn in der Datenbank bereits eine Entität vorhanden ist, wird sie überschrieben. Das Importieren einer bestimmten Teilmenge von Arten und/oder Namespaces mit einem Entitätsfilter wird ebenfalls unterstützt.