Mit der Wiederherstellung zu einem bestimmten Zeitpunkt arbeiten
Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt (PITR) Daten in Firestore speichern und wiederherstellen.
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 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. 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 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 lesen Sie Daten aus PITR-Daten:
datastore.databases.get
,datastore.entities.get
,datastore.entities.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 Wiederherstellung zu einem bestimmten Zeitpunkt 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 create
verwenden. Das Aktivieren von PITR beim Erstellen einer Datenbank über die Google Cloud -Konsole wird nicht unterstützt. - Firestore beginnt mit dem Aufbewahren von Versionen ab dem Zeitpunkt, an dem die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert wird.
- Nachdem Sie PITR deaktiviert haben, können Sie keine PITR-Daten mehr im PITR-Zeitfenster 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 versehentlich Daten in der letzten Stunde 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
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 auf der Seite „Disaster Recovery“ in der Google Cloud -Konsole 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
:
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 Ort, an dem Sie Ihre Datenbank erstellen möchten.DATABASE_ID
: Auf die Datenbank-ID oder (Standard) festlegen.TYPE
– auf „firestore-native“ 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) 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 den Aufbewahrungszeitraum und den Zeitstempel der ältesten Version.
- Aufbewahrungszeitraum: Der Zeitraum, in dem Firestore alle Datenversionen für die Datenbank beibehält. Der Wert beträgt eine Stunde, wenn PITR deaktiviert ist, und sieben Tage, wenn PITR aktiviert ist.
- Zeit der frühesten Version: Der früheste Zeitstempel, zu dem ältere Versionen der Daten im PITR-Zeitraum gelesen werden können. Dieser Wert wird von Firestore 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: Hier 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/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
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, sehen Sie entwederPOINT_IN_TIME_RECOVERY_DISABLED
oder das FeldpointInTimeRecoveryEnablement
wird nicht angezeigt.versionRetentionPeriod
: Zeitraum, für den PITR-Daten in Millisekunden aufbewahrt werden. Der Wert kann eine Stunde sein, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert ist, oder sieben Tage, wenn sie 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 ReadOnly
-Transaktion verwenden, um PITR-Daten zu lesen. Sie können readTime
nicht direkt in Lesevorgängen angeben.
Weitere Informationen finden Sie unter Transaktionen und Batch-Schreibvorgänge.
Firestore firestore = …
TransactionOptions options =
TransactionOptions.createReadOnlyOptionsBuilder()
.setReadTime(
com.google.protobuf.Timestamp.newBuilder()
.setSeconds(1684098540L)
.setNanos(0))
.build();
ApiFuture<Void> futureTransaction = firestore.runTransaction(
transaction -> {
// Does a snapshot read document lookup
final DocumentSnapshot documentResult =
transaction.get(documentReference).get();
// Executes a snapshot read query
final QuerySnapshot queryResult =
transaction.get(query).get();
},
options);
// Blocks on transaction to complete
futureTransaction.get();
Knoten
Sie müssen eine ReadOnly
-Transaktion verwenden, um PITR-Daten zu lesen. Sie können readTime
nicht direkt in Lesevorgängen angeben.
Weitere Informationen finden Sie unter Transaktionen und Batch-Schreibvorgänge.
const documentSnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(documentRef),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
const querySnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(query),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
REST API
PITR-Lesevorgänge werden in allen Firestore-Lesemethoden unterstützt, nämlich get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery und partitionQuery.
Wenn Sie einen Lesevorgang mit den REST-Methoden ausführen möchten, haben Sie folgende Möglichkeiten:
Übergeben Sie in Ihrer Lesemethodenanfrage den
readTime
-Wert als unterstützten PITR-Zeitstempel in derreadOptions
-Methode. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Mikrosekundengenauigkeit innerhalb der letzten Stunde oder ein Zeitstempel mit Minutengenauigkeit außerhalb der letzten Stunde sein, darf aber nicht vor demearliestVersionTime
liegen.Verwenden Sie den Parameter
readTime
zusammen mit der MethodeBeginTransaction
als Teil einerReadOnly
-Transaktion für mehrere PITR-Lesevorgänge.
Apache Beam
Mit dem FirestoreIO-Apache Beam-Connector können Sie Dokumente in einer Firestore-Datenbank in großem Umfang mit Dataflow lesen oder schreiben.
PITR-Lesevorgänge werden in der folgenden Lesemethode des FirestoreIO-Connectors unterstützt. Diese Lesemethoden unterstützen die withReadTime(@Nullable Instant readTime)
-Methode, die Sie für PITR-Lesevorgänge verwenden können:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Der folgende Code kann mit dem Beispielcode für Dataflow-Pipelines für Lese- oder Schreibvorgänge verwendet werden. Im Beispiel wird die Methode withReadTime(@Nullable Instant readTime)
für PITR-Lesevorgänge verwendet.
Instant readTime = Instant.ofEpochSecond(1684098540L);
PCollection<Document> documents =
pipeline
.apply(Create.of(collectionId))
.apply(
new FilterDocumentsQuery(
firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
.apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
...
Eine vollständige Liste der readTime
-Beispiele in der Dataflow-Pipeline finden Sie im GitHub-Repository.
Aus PITR-Daten 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 ein Zeitstempel für eine volle Minute innerhalb der letzten sieben Tage ist, aber nicht vor dem 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 Dokumente und des Exports bestimmter Sammlungen.
Exportieren Sie die Datenbank und geben Sie für den Parameter
snapshot-time
den ausgewählten 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 einer Granularität von einer Minute, z. B.2023-05-26T10:20:00.00Z
oder2023-10-19T10:30:00.00-07:00
.COLLECTION_IDS
: Eine Liste von Sammlungs-IDs oder Sammlungs-Gruppen-IDs, z. B.'specific-collection-group1','specific-collection-group2'
.NAMESPACE_IDS
: Eine Liste von Namespace-IDs, z. B.'customer','orders'
.
Beachten Sie vor dem Exportieren von 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 für eine volle Minute innerhalb der letzten sieben Tage ist, aber nicht vor dem
earliestVersionTime
liegt. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, wird ein Fehler generiert. Der Zeitstempel muss eine volle Minute sein, auch wenn die angegebene Zeit innerhalb der letzten Stunde liegt. - Für einen fehlgeschlagenen PITR-Export werden Ihnen keine Gebühren in Rechnung gestellt.
In eine Datenbank importieren.
Folgen Sie der Anleitung unter Alle Dokumente importieren, um die exportierte Datenbank zu importieren. Wenn in Ihrer Datenbank bereits ein Dokument vorhanden ist, wird es überschrieben.