Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt Daten in Spanner für Datenbanken mit GoogleSQL- und PostgreSQL-Dialekt 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 Spanner-Kurzanleitung 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 Google Cloud Console die Seite „Spanner-Instanzen“ 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'
);
...
Clientbibliotheken
C#
C++
Go
Java
Node.js
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 Spanner API aktiviert haben, wird das Ereignis als UpdateDatabaseDdl protokolliert und im Log-Explorer angezeigt.
- Wenn Sie zur standardmäßigen Aufbewahrungsdauer von einer Stunde zurückkehren möchten, können Sie die
version_retention_period
-Datenbankoption für Google SQL-Datenbanken aufNULL
oder für PostgreSQL-Datenbanken aufDEFAULT
festlegen. - Wenn Sie die Aufbewahrungsdauer verlängern, führt das System kein Backfill früherer Datenversionen aus. Wenn Sie beispielsweise die Aufbewahrungsdauer von einer 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 Zeitstempel der ältesten Version abrufen
Die Ressource Datenbank enthält zwei Felder:
version_retention_period
: Der Zeitraum, in dem 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 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 Google Cloud Console die Seite „Spanner-Instanzen“ 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 den Zeitstempel der ältesten Version 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 erforderlichen 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 Sie sie auf der Konsole speichern oder im Speicher ablegen. Bei größeren Datenmengen müssen Sie sie möglicherweise in eine lokale Datei schreiben.
Schreiben Sie die wiederhergestellten Daten zurück in die Tabelle, die wiederhergestellt werden soll. Beispiel:
gcloud
gcloud spanner rows update --instance=test-instance --database=example-db --table=Singers \ --data=SingerId=1,FirstName='Marc'
Weitere Informationen finden Sie unter Daten mit gcloud aktualisieren.
Clientbibliotheken
Siehe Daten mit DML aktualisieren oder Daten mit Mutationen aktualisieren.
Wenn Sie die wiederhergestellten Daten vor dem Zurückschreiben analysieren möchten, können Sie in derselben Datenbank manuell eine temporäre Tabelle erstellen, die wiederhergestellten Daten zuerst in diese temporäre Tabelle schreiben, die Analyse ausführen und dann die Daten, die Sie wiederherstellen möchten, aus dieser temporären Tabelle lesen und in die Tabelle schreiben, die wiederhergestellt werden soll.
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 erforderlichen 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.
Clientbibliotheken
C#
C++
Go
Java
Node.js
PHP
Python
Ruby
Stellen Sie aus der Sicherung eine neue Datenbank wieder her. Beachten Sie, dass 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.
Clientbibliotheken
C#
C++
Go
Java
Node.js
PHP
Python
Ruby
Import und Export
- Exportieren Sie die Datenbank und geben Sie für den Parameter
snapshotTime
den erforderlichen 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 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.
- 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 Spanner Avro-Dateien importieren.
gcloud
Verwenden Sie die Dataflow-Vorlage Cloud Storage Avro für 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.
GoogleSQL
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);
PostgreSQL
SELECT
bph / (1024 * 1024 * 1024 ) as GiB
FROM (
SELECT
SUM(bytes_per_hour) as bph
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)
sub1) sub2;
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 vorherige Datenversionen. Wenn Ihre Arbeitslast viele Einfügungsvorgänge umfasst, kann die Abfrage die Speichererweiterung übersteigen.