Mit Wiederherstellung zu einem bestimmten Zeitpunkt arbeiten

Auf dieser Seite wird beschrieben, wie Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden, um Daten in Firestore 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
  • 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.
  • Firestore beginnt nach dem Aktivieren von PITR mit der Beibehaltung von Versionen ab dem Zeitpunkt.
  • 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. Die PITR-Funktion kann nur für Google Cloud-Projekte mit aktivierter Abrechnung verwendet werden.

So aktivieren Sie PITR für Ihre Datenbank:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.

  4. Klicken Sie auf Bearbeiten, um die Einstellungen zu bearbeiten.

  5. 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.

Wenn Sie die Wiederherstellung zu einem bestimmten Zeitpunkt deaktivieren möchten, 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) festgelegt
  • 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) festgelegt

Aufbewahrungsdauer und früheste Versionszeit abrufen

Console

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.

  4. Beachten Sie im Bereich Einstellungen die Werte für Aufbewahrungsdauer und Frühestmöglicher Versionszeitpunkt.

    • Aufbewahrungsdauer: Der Zeitraum, in dem Firestore alle Versionen von Daten für die Datenbank aufbewahrt. 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 ältere Versionen der Daten im PITR-Fenster gelesen werden können. Dieser Wert wird von Firestore kontinuierlich aktualisiert und ist sofort nach 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, wird Disabled 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: 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: zeigt POINT_IN_TIME_RECOVERY_ENABLED an, wenn PITR aktiviert ist. Wenn PITR deaktiviert ist, wird entweder POINT_IN_TIME_RECOVERY_DISABLED angezeigt oder das Feld pointInTimeRecoveryEnablement wird möglicherweise nicht angezeigt.
  • versionRetentionPeriod ist der Zeitraum in Millisekunden, für den PITR-Daten aufbewahrt werden. Der Wert kann eine Stunde bei deaktivierter PITR oder sieben Tage betragen, 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 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: get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery und partitionQuery.

Versuchen Sie es mit einer der folgenden Optionen, um einen Lesevorgang mit den REST-Methoden durchzuführen:

  1. Übergeben Sie in der Anfrage zur Lesemethode den Wert readTime als unterstützten PITR-Zeitstempel in die readOptions-Methode. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Genauigkeit in Mikrosekunden innerhalb der letzten Stunde oder ein Zeitstempel für eine ganze Minute nach der letzten Stunde, aber nicht vor dem earliestVersionTime.

  2. Verwenden Sie den Parameter readTime zusammen mit der Methode BeginTransaction im Rahmen einer ReadOnly-Transaktion für mehrere PITR-Lesevorgänge.

apache beam

Den Apache Beam-Connector für FirestoreIO verwenden, um mit Dataflow in großem Umfang Dokumente in einer Firestore-Datenbank zu lesen oder zu schreiben.

PITR-Lesevorgänge werden in der folgenden Lesemethode des Firestore-Connectors unterstützt. Diese Lesemethoden unterstützen die Methode withReadTime(@Nullable Instant readTime), die Sie für PITR-Lesevorgänge verwenden können:

Java

Der folgende Code kann mit dem Beispielcode für die Dataflow-Pipeline für Bulk-Lese- oder Schreibvorgänge verwendet werden. In diesem 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

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 Dokumente und des Exports bestimmter Sammlungen.

  1. Exportieren Sie die Datenbank und geben Sie für den Parameter snapshot-time den gewünschten 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 sind.
    • PITR_TIMESTAMP: ein PITR-Zeitstempel im Minutentakt, z. B. 2023-05-26T10:20:00.00Z oder 2023-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'

    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.00Zoder 2023-10-19T10:30:00.00-07:00
    • Achten Sie darauf, dass der von Ihnen angegebene Zeitstempel ein Zeitstempel innerhalb einer ganzen Minute innerhalb der letzten sieben Tage ist, aber nicht vor dem earliestVersionTime liegt. Wenn Daten am angegebenen Zeitstempel nicht mehr vorhanden sind, wird ein Fehler generiert. 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.
  2. In eine Datenbank importieren.

    Führen Sie die Schritte unter Alle Dokumente importieren aus, um die exportierte Datenbank zu importieren. Wenn in der Datenbank bereits ein Dokument vorhanden ist, wird es überschrieben.