Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt Daten in Firestore im Datastore-Modus speichern und wiederherstellen.
Informationen zu den Konzepten der PITR finden Sie unter Wiederherstellung zu einem bestimmten Zeitpunkt.
Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Datastore Owner (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 auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Verwalten von PITR-Einstellungen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um PITR-Einstellungen zu verwalten:
-
So aktivieren Sie die Wiederherstellung zu einem bestimmten Zeitpunkt beim Erstellen einer Datenbank:
datastore.databases.create
-
So aktualisieren Sie die PITR-Einstellungen in einer vorhandenen Datenbank:
datastore.databases.update
,datastore.databases.list
-
So lesen Sie Daten aus PITR-Daten:
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.
Hinweise
Beachten Sie Folgendes, bevor Sie PITR verwenden:
- Sie können nicht sofort nach der Aktivierung der PITR-Datenwiederherstellung mit dem Lesen von Daten beginnen, die sieben Tage zurückliegen.
- 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 über die Google Cloud -Konsole wird nicht unterstützt. - Im Datastore-Modus werden Versionen ab dem Zeitpunkt aufbewahrt, an dem Sie die PITR aktiviert haben.
- Nachdem Sie PITR deaktiviert haben, können Sie keine PITR-Daten im PITR-Fenster mehr lesen.
- Wenn Sie PITR sofort nach der Deaktivierung 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 sie wiederherstellen, indem Sie PITR innerhalb einer Stunde nach dem Löschen aktivieren.
- Alle Lesevorgänge, die auf abgelaufenen PITR-Daten ausgeführt werden, schlagen fehl.
PITR aktivieren
Bevor Sie PITR verwenden können, müssen Sie die Abrechnung für Ihr Google Cloud-Projekt aktivieren. Die PITR-Funktion kann nur für Google Cloud -Projekte 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.
Wenn Sie PITR aktivieren, fallen Speicherkosten an. Weitere Informationen finden Sie unter Preise.
Wenn Sie die Wiederherstellung zu einem bestimmten Zeitpunkt 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 -Konsole.
gcloud
Aktivieren Sie PITR während der Datenbankerstellung mit dem Befehl gcloud firestore databases create
:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
Ersetzen Sie die Werte so:
LOCATION
: Speicherort, an dem Sie die Datenbank erstellen möchten.DATABASE_ID
– auf die Datenbank-ID oder (Standardeinstellung) festlegenTYPE
– auf „datastore-mode“ 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 (Standardeinstellung) festlegen
Aufbewahrungsdauer und Zeitstempel der ältesten 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 Aufbewahrungsdauer und den Zeitstempel der ältesten Version.
- Aufbewahrungsdauer: Der Zeitraum, in dem im Datastore-Modus alle Datenversionen für die Datenbank beibehalten werden. Der Wert ist eine Stunde, wenn die PITR deaktiviert ist, und sieben Tage, wenn die PITR aktiviert ist.
- Zeitstempel der ältesten Version: 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 in dem Moment veraltet, in dem er abgefragt wird. Wenn Sie diesen Wert zur Wiederherstellung von Daten verwenden, müssen Sie die Zeit in dem Moment berücksichtigen, in dem der Wert abgefragt wird, bis zu dem Zeitpunkt, an dem Sie die Wiederherstellung initiieren.
- Wiederherstellung zu einem bestimmten Zeitpunkt: Wird
Enabled
angezeigt, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert ist. Wenn PITR deaktiviert ist, wirdDisabled
angezeigt.
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
: WirdPOINT_IN_TIME_RECOVERY_ENABLED
angezeigt, wenn PITR aktiviert ist. Wenn PITR deaktiviert ist, wird entwederPOINT_IN_TIME_RECOVERY_DISABLED
oder das FeldpointInTimeRecoveryEnablement
möglicherweise nicht angezeigt.versionRetentionPeriod
– Zeitraum, in dem PITR-Daten in Millisekunden aufbewahrt werden. Der Wert kann eine Stunde betragen, wenn PITR deaktiviert ist, oder sieben Tage, wenn PITR aktiviert ist.
PITR-Daten lesen
Sie können PITR-Daten mithilfe der Clientbibliotheken, REST API-Methoden oder des FirestoreIO Apache Beam-Connectors 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 für Lesevorgänge verwenden.
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 die PITR-Lesefunktion im Datastore-Modus des Python SDK mit der Methode readTime
oder die ReadOnly
-Transaktion 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-Lesungen werden von den Lesemethoden des Datastore-Modus V1 unterstützt: lookup, runQuery und runAggregationQuery.
Sie haben folgende Möglichkeiten, eine Leseoperation mithilfe der REST-Methoden auszuführen:
Geben Sie in der Anfrage für die Lesemethode den Wert
readTime
als unterstützten PITR-Zeitstempel in der MethodereadOptions
an. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Mikrosekundengenauigkeit innerhalb der letzten Stunde oder ein Zeitstempel mit einer ganzen Minute nach der letzten Stunde sein, jedoch nicht älter als derearliestVersionTime
.Verwenden Sie den Parameter
readTime
zusammen mit der MethodeBeginTransaction
als Teil einerReadOnly
-Transaktion für mehrere PITR-Lesungen.
Apache Beam
Mit dem Apache Beam-IO-Connector für den Datastore-Modus können Sie mit Dataflow Entitäten in einer Datastore-Datenbank im großen Maßstab lesen oder schreiben.
Geben Sie die Methode withReadTime(Instant readTime)
für das Objekt DatastoreV1.Read
an. Alle nachfolgenden Lesevorgänge mit dem DatastoreV1.Read
-Objekt werden aus demselben readTime
gelesen.
Java
Im folgenden Code wird gezeigt, wie die Methode withReadTime
für PITR-Lesungen 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.
Daten aus PITR exportieren und importieren
Sie können Ihre Datenbank mit dem Befehl gcloud firestore export
aus PITR-Daten in Cloud Storage exportieren. Sie können PITR-Daten exportieren, deren Zeitstempel auf eine volle Minute innerhalb der letzten sieben Tage festgelegt ist, jedoch nicht früher als der 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 für den Parameter
snapshot-time
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
: PITR-Zeitstempel mit Minutengenauigkeit, z. B.2023-05-26T10:20:00.00Z
oder2023-10-19T10:30:00.00-07:00
.COLLECTION_IDS
: 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'
.
Es wird auch unterstützt, eine bestimmte Teilmenge von Arten und/oder Namespaces mit einem Entitätsfilter zu exportieren.
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.00Z
oder2023-10-19T10:30:00.00-07:00
- Achten Sie darauf, dass der von Ihnen angegebene Zeitstempel ein Zeitstempel für eine volle Minute innerhalb der letzten sieben Tage ist, aber nicht älter als der
earliestVersionTime
. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, erhalten Sie eine Fehlermeldung. Der Zeitstempel muss eine ganze Minute betragen, auch wenn die angegebene Uhrzeit innerhalb der letzten Stunde liegt. - Für einen fehlgeschlagenen PITR-Export werden Ihnen keine Kosten in Rechnung gestellt.
In eine Datenbank importieren.
Folgen Sie der Anleitung unter Alle Entitäten importieren, um die exportierte Datenbank zu importieren. Wenn ein Element bereits in Ihrer Datenbank vorhanden ist, wird es überschrieben. Es wird auch unterstützt, eine bestimmte Teilmenge von Arten und/oder Namespaces mit einem Entitätsfilter zu importieren.