Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt Daten in Cloud Spanner speichern und wiederherstellen.
Weitere Informationen finden Sie unter Wiederherstellung zu einem bestimmten Zeitpunkt.
Vorbereitung
In diesem Leitfaden werden die Datenbank und das Schema verwendet, wie in der Kurzanleitung zu Cloud Spanner definiert. Sie können die Kurzanleitung durcharbeiten, um die Datenbank und das Schema zu erstellen, oder die Befehle für die Verwendung mit Ihrer eigenen Datenbank ändern.
Aufbewahrungsdauer festlegen
So legen Sie die Aufbewahrungsdauer Ihrer Datenbank fest:
Console
Rufen Sie in der Cloud Console die Seite Instanzen für Cloud Spanner auf.
Klicken Sie auf die Instanz, die die Datenbank enthält, um die zugehörige Übersichtsseite zu öffnen.
Klicken Sie auf die Datenbank, um die zugehörige Übersichtsseite zu öffnen.
Wählen Sie den Tab Sicherung/Wiederherstellung aus.
Klicken Sie auf das Stiftsymbol im Feld Versionsaufbewahrungsdauer.
Geben Sie eine Menge und eine Zeiteinheit für die Aufbewahrungsdauer ein und klicken Sie auf Aktualisieren.
gcloud
Aktualisieren Sie das Schema der Datenbank mit der Anweisung ALTER DATABASE. Beispiel:
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='ALTER DATABASE `example-db` SET OPTIONS (version_retention_period="7d");'
Rufen Sie die DDL Ihrer Datenbank ab, um die Aufbewahrungsdauer aufzurufen:
gcloud spanner databases ddl describe example-db --instance=test-instance
Hier ist die Ausgabe:
ALTER DATABASE example-db SET OPTIONS (
version_retention_period = '7d'
);
...
C#
C++
Go
Java
Knoten
PHP
Python
Ruby
Verwendungshinweise:
- Die Aufbewahrungsdauer muss zwischen 1 Stunde und 7 Tagen liegen und kann in Tagen, Stunden, Minuten oder Sekunden angegeben werden. Die Werte
1d
,24h
,1440m
und86400s
sind beispielsweise äquivalent. - Wenn Sie in Ihrem Projekt das Logging für die Cloud Spanner API aktiviert haben, wird das Ereignis als UpdateDatabaseDdl protokolliert und in der Loganzeige sichtbar.
- Wenn Sie zur standardmäßigen Aufbewahrungsdauer von einer Stunde zurückkehren möchten, können Sie den Wert entweder auf eine Stunde oder
NULL
festlegen. - Wenn Sie die Aufbewahrungsdauer verlängern, führt das System kein Backfill früherer Datenversionen aus. Wenn Sie beispielsweise die Aufbewahrungsdauer von 1 Stunde auf 24 Stunden verlängern, müssen Sie 23 Stunden warten, bis das System alte Daten gesammelt hat, bevor Sie Daten aus der letzten 24 Stunden wiederherstellen können.
Aufbewahrungsdauer und früheste Versionszeit abrufen
Die Ressource Datenbank enthält zwei Felder:
version_retention_period
: Der Zeitraum, in dem Cloud Spanner alle Datenversionen für die Datenbank beibehält.earliest_version_time
: Der früheste Zeitstempel, zu dem ältere Versionen der Daten aus der Datenbank gelesen werden können. Dieser Wert wird von Cloud Spanner 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.
Console
Rufen Sie in der Cloud Console die Seite Instanzen für Cloud Spanner auf.
Klicken Sie auf die Instanz, die die Datenbank enthält, um die zugehörige Übersichtsseite zu öffnen.
Klicken Sie auf die Datenbank, um die zugehörige Übersichtsseite zu öffnen.
Wählen Sie den Tab Sicherung/Wiederherstellung aus, um die Seite Sicherung/Wiederherstellung zu öffnen und die Aufbewahrungsdauer anzeigen zu lassen.
Klicken Sie auf Erstellen, um die Seite Sicherung erstellen zu öffnen und die früheste Versionszeit anzeigen zu lassen.
gcloud
Sie können diese Felder abrufen, indem Sie Datenbanken beschreiben oder Datenbanken auflisten aufrufen. Beispiel:
gcloud spanner databases describe example-db --instance=test-instance
Hier ist die Ausgabe:
createTime: '2020-09-07T16:56:08.285140Z'
earliestVersionTime: '2020-10-07T16:56:08.285140Z'
name: projects/my-project/instances/test-instance/databases/example-db
state: READY
versionRetentionPeriod: 3d
Teil einer Datenbank wiederherstellen
Führen Sie einen veralteten Lesevorgang durch und geben Sie den gewünschten Zeitstempel für die Wiederherstellung an. Achten Sie darauf, dass der von Ihnen angegebene Zeitstempel aktueller ist, als die
earliest_version_time.
der Datenbank.gcloud
Verwenden Sie execute-sql. Beispiel:
gcloud spanner databases execute-sql example-db --instance=test-instance --read-timestamp=2020-09-11T10:19:36.010459-07:00 --sql='SELECT * FROM SINGERS'
Clientbibliotheken
Speichern Sie die Ergebnisse der Abfrage. Dies ist erforderlich, da Sie die Ergebnisse der Abfrage nicht in derselben Transaktion in die Datenbank zurückschreiben können. Bei kleinen Datenmengen können Siesie auf der Konsole speichern oder im Speicher ablegen. Bei größeren Datenmengen müssen Sie sie möglicherweise in eine Datei oder temporäre Tabelle schreiben.
Schreiben Sie die wiederhergestellten Daten zurück in die Datenbank. Beispiel:
gcloud
gcloud spanner rows update --instance=test-instance --database=example-db --table=Singers --data=SingerId=1,FirstName=10
Weitere Informationen finden Sie unter Daten mit gcloud aktualisieren.
Clientbibliotheken
Siehe Daten mit DML aktualisieren oder Daten mit Mutationen aktualisieren.
Gesamte Datenbank wiederherstellen
Sie können die gesamte Datenbank entweder mit Sicherung und Wiederherstellung oder mit Import und Export wiederherstellen und einen Wiederherstellungszeitstempel angeben.
Sichern und Wiederherstellen
Erstellen Sie eine Sicherung und legen Sie für
version_time
den gewünschten Wiederherstellungszeitstempel fest.Console
Rufen Sie in der Cloud Console die Seite Datenbankdetails auf.
Klicken Sie auf dem Tab Sicherung/Wiederherstellung auf Erstellen.
Klicken Sie das Kästchen Sicherung von einem früheren Zeitpunkt erstellen an.
gcloud
gcloud spanner backups create example-db-backup-1 --instance=test-instance \ --database=example-db --retention-period=1y --version-time=2021-01-22T01:10:35Z --async
Weitere Informationen finden Sie unter Sicherung mit gcloud erstellen.
C#
C++
Go
Java
Knoten
PHP
Python
Ruby
Stellen Sie aus der Sicherung eine neue Datenbank wieder her. Beachten Sie, dass Cloud Spanner die Einstellung für die Aufbewahrungsdauer von der Sicherung in der wiederhergestellten Datenbank beibehält.
Console
Öffnen Sie in der Cloud Console die Seite Instanzdetails.
Wählen Sie auf dem Tab Sicherung/Wiederherstellung eine Sicherung aus und klicken Sie auf Wiederherstellen.
gcloud
gcloud spanner databases restore --async \ --destination-instance=destination-instance --destination-database=example-db-restored \ --source-instance=test-instance --source-backup=example-db-backup-1
Weitere Informationen finden Sie unter Datenbank aus einer Sicherung wiederherstellen.
C#
C++
Go
Java
Knoten
PHP
Python
Ruby
Import und Export
Exportieren Sie die Datenbank und geben Sie für den Parameter
snapshotTime
den gewünschten Wiederherstellungszeitstempel an.Console
Öffnen Sie in der Cloud Console die Seite Instanzdetails.
Klicken Sie auf dem Tab Import/Export auf Export.
Klicken Sie das Kästchen Datenbank von einem früheren Zeitpunkt exportieren an.
Eine ausführliche Anleitung finden Sie unter Datenbank exportieren.
gcloud
Verwenden Sie die Dataflow-Vorlage Cloud Spanner für Avro, um die Datenbank zu exportieren.
gcloud dataflow jobs run JOB_NAME \ --gcs-location='gs://cloud-spanner-point-in-time-recovery/Import Export Template/export/templates/Cloud_Spanner_to_GCS_Avro' --region=DATAFLOW_REGION --parameters='instanceId=test-instance,databaseId=example-db,outputDir=YOUR_GCS_DIRECTORY,snapshotTime=2020-09-01T23:59:40.125245Z'
Verwendungshinweise:
- Sie können den Fortschritt Ihrer Import- und Exportjobs in der Dataflow-Konsole verfolgen.
- Cloud Spanner garantiert, dass die exportierten Daten zum angegebenen Zeitstempel extern und transaktional konsistent sind.
- Geben Sie den Zeitstempel im RFC 3339-Format an. Beispiel: 2020-09-01T23:59:30.234233Z.
- Achten Sie darauf, dass der von Ihnen angegebene Zeitstempel aktueller ist als die
earliest_version_time
der Datenbank. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, erhalten Sie eine Fehlermeldung.
In eine neue Datenbank importieren.
Console
Öffnen Sie in der Cloud Console die Seite Instanzdetails.
Klicken Sie auf dem Tab Import/Export auf Importieren.
Eine detaillierte Anleitung finden Sie unter Cloud Spanner Avro-Dateien importieren.
gcloud
Verwenden Sie die Dataflow-Vorlage Cloud Storage Avro für Cloud Spanner, um die Avro-Dateien zu importieren.
gcloud dataflow jobs run JOB_NAME \ --gcs-location='gs://cloud-spanner-point-in-time-recovery/Import Export Template/import/templates/GCS_Avro_to_Cloud_Spanner' \ --region=DATAFLOW_REGION \ --staging-location=YOUR_GCS_STAGING_LOCATION \ --parameters='instanceId=test-instance,databaseId=example-db,inputDir=YOUR_GCS_DIRECTORY'
Speichererhöhung schätzen
Bevor Sie die Versionsaufbewahrungsdauer einer Datenbank erhöhen, können Sie die erwartete Zunahme der Datenbankspeichernutzung schätzen. Dazu addieren Sie die Transaktionsbyte für den gewünschten Zeitraum. Die folgende Abfrage berechnet beispielsweise die Anzahl der GiB, die in den letzten sieben Tagen (168 h) geschrieben wurde, indem sie aus den Transaktionsstatistiktabellen liest.
SELECT
SUM(bytes_per_hour) / (1024 * 1024 * 1024 ) as GiB
FROM (
SELECT
((commit_attempt_count - commit_failed_precondition_count - commit_abort_count) * avg_bytes) AS bytes_per_hour,
interval_end
FROM
spanner_sys.txn_stats_total_hour
ORDER BY
interval_end DESC
LIMIT
168);
Beachten Sie, dass die Abfrage eine grobe Schätzung darstellt und aus verschiedenen Gründen ungenau sein kann:
- Die Abfrage berücksichtigt nicht den Zeitstempel, der für jede Version alter Daten gespeichert werden muss. Wenn Ihre Datenbank aus vielen kleinen Datentypen besteht, ist die Speichererweiterung möglicherweise unterschätzt.
- Die Abfrage enthält alle Schreibvorgänge, aber nur Aktualisierungsvorgänge erstellen alte Datenversionen. Wenn Ihre Arbeitslast viele Einfügungsvorgänge umfasst, kann die Abfrage die Speichererweiterung übersteigen.