Auf dieser Seite erfahren Sie, wie Sie einen Datenbankcluster auf einem einzelnen Server mithilfe einer lokalen Sicherung klonen.
Bei den Schritten auf dieser Seite wird davon ausgegangen, dass der Quell-Kubernetes-Datenbankcluster in der Google Kubernetes Engine erstellt wird und die Sicherungslaufwerke persistente Laufwerke der Compute Engine sind. Außerdem wird davon ausgegangen, dass der AlloyDB Omni-Einzelserver auf einer Compute Engine-VM installiert ist.
Wenn Sie andere Umgebungen verwenden, lesen Sie die jeweilige Dokumentation, um diese Schritte in Ihrer Umgebung auszuführen.
Im folgenden Workflow werden die Schritte zum Klonen erläutert:
- Geben Sie die Informationen zum Sicherungslaufwerk für den Cluster der Quelldatenbank an, z. B. den Namen des nichtflüchtigen Volumes und den nichtflüchtigen Speicher-Handler der Compute Engine.
- Binden Sie das Sicherungslaufwerk des Quelldatenbankclusters auf dem Zielserver an.
- Prüfen Sie mit
pgBackRest
-Befehlen, ob auf die Quellsicherungen zugegriffen werden kann. - Verwenden Sie
pgBackRest
-Befehle, um die Sicherung im Zieldatenbankcluster wiederherzustellen.
Hinweise
- Sie benötigen Zugriff auf das Sicherungslaufwerk, auf dem das Back-up des Quelldatenbankclusters gespeichert ist.
- Es wird ein AlloyDB Omni-Datenbankcluster mit einem einzelnen Server als Ziel erstellt. Weitere Informationen zur Installation von AlloyDB Omni in Kubernetes finden Sie unter AlloyDB Omni installieren.
- Sie müssen als Nutzer
postgres
in der Datenbank angemeldet sein.
Informationen zum Quelllaufwerk für die Sicherung abrufen
Legen Sie im Rahmen der Wiederherstellung den Namen des Persistent Volume Claim (PVC) für das Sicherungslaufwerk für Ihren Quelldatenbankcluster fest. PVCs werden in Kubernetes verwendet, um nichtflüchtigen Speicher für Anwendungen zu verwalten.
Mit den folgenden Beispielbefehlen können Sie den zugrunde liegenden PV-Namen und den nichtflüchtigen Speicher-Handler der Compute Engine anhand des PVC-Namens des Sicherungslaufwerks ermitteln.
Stellen Sie eine Verbindung zu Ihrem GKE-Cluster her, in dem Sie den AlloyDB Omni-Quelldatenbankcluster erstellt haben:
kubectl get pvc -n DB_CLUSTER_NAMESPACE | grep DB_CLUSTER_NAME | grep backupdisk
Ersetzen Sie Folgendes:
DB_CLUSTER_NAMESPACE
: der Kubernetes-Namespace für diese Sicherung. Er muss mit dem Namespace des Datenbankclusters übereinstimmen.DB_CLUSTER_NAME
: der Name dieses Datenbankclusters, z. B.my-db-cluster
.
Hier ist eine Beispielantwort:
backupdisk-al-fe8c-dbcluster-sample-0 Bound pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a 10Gi RWO standard-rwo 5d21h ```
Verwenden Sie den Namen des Sicherungslaufwerks aus dem vorherigen Schritt, z. B.
backupdisk-al-fe8c-dbcluster-sample-0
, um den zugrunde liegenden PV-Namen zu ermitteln:kubectl get pvc/PVC_NAME -n DB_CLUSTER_NAMESPACE -o jsonpath={.spec.volumeName}
Ersetzen Sie Folgendes:
PVC_NAME
: Der PVC-Name des Sicherungslaufwerks aus der Antwort im vorherigen Schritt, z. B.backupdisk-al-fe8c-dbcluster-sample-0
.
Suchen Sie den zugrunde liegenden nichtflüchtigen Speicher-Handler der Compute Engine:
kubectl get pv/$PV_NAME -o json | jq -r .spec.csi.volumeHandle
Ersetzen Sie Folgendes:
PV_NAME
: der PV-Name des Sicherungslaufwerks aus der Antwort im vorherigen Schritt.
Hier ist eine Beispielantwort:
projects/my-project/zones/us-central1-a/disks/pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3
Exportieren Sie den Namen des Sicherungslaufwerks als Variable, die in den folgenden Abschnitten verwendet wird:
export BACKUP_DISK=pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3
Sicherungslaufwerk auf dem Zielserver bereitstellen
Angenommen, der Zielserver ist ein AlloyDB Omni-Server, der auf einer Compute Engine-VM installiert ist, müssen Sie das Sicherungslaufwerk auf dem Server bereitstellen.
Führen Sie den Befehl
gcloud compute instances attach-disk
aus, um das Laufwerk bereitzustellen:gcloud compute instances attach-disk GCE_INSTANCE_NAME \ --disk ${BACKUP_DISK} \ --zone=$GCE_ZONE
Ersetzen Sie Folgendes:
GCE_INSTANCE_NAME
: der Name der Instanz, in der der Zielserver auf der Compute Engine-VM installiert ist.GCE_ZONE
: die Zone, in der sich Ihre Compute Engine-VM-Instanz befindet.
Stellen Sie das Sicherungslaufwerk auf dem Zielserver bereit:
lsblk mkdir -p /mnt/disks/backupdisk mount -o discard,defaults /dev/sdb /mnt/disks/backupdisk
Fügen Sie der AlloyDB Omni-Datei
dataplane.conf
im Verzeichnis/var/alloydb/config
eine benutzerdefinierte Bindung hinzu:PG_BIND_MOUNTS=/mnt/disks/backupdisk:/mnt/disks/backups:rshared
Weitere Informationen zu Bind-Mounts in Docker finden Sie unter Bind-Mounts.
- Starten Sie den Zielserver neu:
Docker
docker restart CONTAINER_NAME
Ersetzen Sie CONTAINER_NAME
durch den Namen eines neuen AlloyDB Omni-Containers, z. B. my-omni-1
.
Podman
podman restart CONTAINER_NAME
Ersetzen Sie CONTAINER_NAME
durch den Namen eines neuen AlloyDB Omni-Containers, z. B. my-omni-1
.
Konfigurationsdatei pgBackRest
aktualisieren
Aktualisieren Sie die vorhandene pgBackRest
-Datei im Verzeichnis des Sicherungslaufwerks mit dem neuen Repositorypfad.
Rufen Sie auf dem Zielserver das Verzeichnis
/mnt/disks/backupdisk
auf:cd /mnt/disks/backupdisk
Aktualisieren Sie den Pfad
pg1-path
in der Dateipgbackrest.conf
auf ein temporäres Verzeichnis, um zu verhindern, dass vorhandene Daten überschrieben werden. Das Verzeichnisdata-restored
wird im Rahmen der Wiederherstellung automatisch erstellt:sudo sed -i 's|.*pg1-path.*|pg1-path=/mnt/disks/pgsql/data-restored|' pgbackrest.conf
Aktualisieren Sie den Pfad
repo1-path
in der Dateipgbackrest.conf
auf ein temporäres Verzeichnis:sudo sed -i 's|.*repo1-path.*|repo1-path=/mnt/disks/backups/repo|' conf.d/repo1-local-backupplan.conf
Quellsicherungen im Zieldatenbankcluster prüfen
Melden Sie sich auf dem Zielserver an und führen Sie pgBackRest
-Befehle aus, um zu prüfen, ob auf dem Zielserver auf die Sicherungen des Quelldatenbankclusters zugegriffen werden kann:
Docker
sudo docker exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 info
Podman
sudo podman exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 info
Hier ist eine Beispielantwort:
stanza: db
status: ok
cipher: none
db (current)
wal archive min/max (15): 000000010000000000000002/00000001000000000000000D
full backup: 20240213-231400F
timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00
wal start/stop: 000000010000000000000003 / 000000010000000000000003
database size: 38.7MB, database backup size: 38.7MB
repo1: backup set size: 4.6MB, backup size: 4.6MB
incr backup: 20240213-231400F_20240214-000001I
timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00
wal start/stop: 00000001000000000000000D / 00000001000000000000000D
database size: 38.7MB, database backup size: 488.3KB
repo1: backup set size: 4.6MB, backup size: 84.2KB
backup reference list: 20240213-231400F
Die Zeitstempel in der Antwort werden entweder verwendet, um die vollständige Sicherung wiederherzustellen oder um von einem bestimmten Zeitpunkt innerhalb des Wiederherstellungszeitraums wiederherzustellen.
Sicherung auf dem Zielserver wiederherstellen
Nachdem Sie die Sicherung oder einen Zeitpunkt ermittelt haben, zu dem Sie wiederherstellen möchten, führen Sie pgBackRest
-Befehle auf dem Zielserver aus. Weitere Informationen zu diesen Befehlen finden Sie unter Befehl „Wiederherstellen“.
Im Folgenden finden Sie einige Beispiele für pgBackRest
-Wiederherstellungsbefehle:
Aus einer Sicherung wiederherstellen
pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
Von einem bestimmten Zeitpunkt wiederherstellen
pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info
Daten auf Zielserver kopieren
Nachdem der Befehl zum Wiederherstellen erfolgreich abgeschlossen wurde, können Sie die Daten aus dem temporären Verzeichnis data-restored
in das aktuelle AlloyDB-Datenverzeichnis kopieren.
Beenden Sie auf dem Zielserver den Datenbankdienst:
Docker
docker stop CONTAINER_NAME
Podman
podman stop CONTAINER_NAME
Benennen Sie das aktuelle Datenverzeichnis sicherheitshalber in einen anderen Namen um:
mv ~/alloydb-data/data ~/alloydb-data/data-old
Benennen Sie das temporäre Verzeichnis
data-restored
in das aktuelle Datenverzeichnis um:mv ~/alloydb-data/data-restored ~/alloydb-data/data
Aktualisieren Sie den Wert
pg1-path
in der Dateipostgresql.auto.conf
, um die wiederhergestellten Daten zu laden:vim ~/alloydb-data/data/postgresql.auto.conf # Verify postgresql.auto.conf. # Do not edit this file manually! # It will be overwritten by the ALTER SYSTEM command. # Recovery settings generated by pgBackRest restore on 2024-03-13 20:47:11 restore_command = 'pgbackrest --config-path=/mnt/disks/pgsql --pg1-path=/mnt/disks/pgsql/data --repo=1 --stanza=db archive-get %f "%p"' recovery_target = 'immediate' recovery_target_action = 'promote' recovery_target_timeline = 'current'
Starten Sie auf dem Zielserver den Datenbankdienst:
Docker
docker start CONTAINER_NAME
Podman
podman start CONTAINER_NAME
Nachdem der Datenbankdienst gestartet wurde, können Sie eine Verbindung zur primären Instanz herstellen und Abfragen ausführen, um zu prüfen, ob die Daten aus der Sicherung wiederhergestellt wurden. Weitere Informationen finden Sie unter Verbindung zu AlloyDB Omni auf einem einzelnen Server herstellen.