Migrieren einer PostgreSQL-Datenbank durch Sichern und Wiederherstellen
GILT FÜR: Azure Database for PostgreSQL – Flexibler Server
Sie können mit pg_dump eine PostgreSQL-Datenbank in eine Sicherungsdatei extrahieren. Die Methode zum Wiederherstellen der Datenbank hängt vom Format der ausgewählten Sicherung ab. Wenn Ihre Sicherung mit dem einfachen Format erstellt wird (dem standardmäßigen -Fp
, sodass keine bestimmte Option angegeben werden muss), ist die einzige Option zum Wiederherstellen die Verwendung von psql, da eine Nur-Text-Datei ausgegeben wird. Für die anderen drei Sicherungsmethoden (benutzerdefiniert, Verzeichnis und TAR) sollte pg_restore verwendet werden.
Wichtig
Die Anweisungen und Befehle in diesem Artikel sind für die Ausführung in Bash-Terminals konzipiert. Dazu gehören Umgebungen wie das Windows-Subsystem für Linux (WSL), Azure Cloud Shell und andere Bash-kompatible Schnittstellen. Stellen Sie sicher, dass Sie ein Bash-Terminal verwenden, um die in diesem Handbuch beschriebenen Schritte und Befehle auszuführen. Die Verwendung einer anderen Art von Terminal- oder Shellumgebung kann zu Unterschieden im Befehlsverhalten und möglicherweise nicht zu den beabsichtigten Ergebnissen führen.
In diesem Artikel konzentrieren wir uns auf das einfache (Standard) und Verzeichnisformat. Das Verzeichnisformat ist nützlich, da es Ihnen ermöglicht, mehrere Kerne für die Verarbeitung zu verwenden. Dadurch kann die Effizienz erheblich verbessert werden, insbesondere für große Datenbanken.
Das Azure-Portal optimiert diesen Prozess über das Blatt „Verbinden“, auf dem vorkonfigurierte Befehle angeboten werden, die auf Ihren Server zugeschnitten sind. Die Werte werden dabei durch Ihre Benutzerdaten ersetzt. Es ist wichtig zu beachten, dass das Blatt „Verbinden“ nur für Azure Database for PostgreSQL – Flexibler Server verfügbar ist und nicht für Einzelserver. Sie können das Feature wie folgt verwenden:
Zugreifen auf das Azure-Portal: Wechseln Sie zuerst zum Azure-Portal, und wählen Sie das Blatt „Verbinden“ aus.
Auswählen der Datenbank: Auf dem Blatt „Verbinden“ finden Sie eine Dropdownliste Ihrer Datenbanken. Wählen Sie die Datenbank aus, für die Sie eine Sicherung ausführen möchten.
Auswählen der geeigneten Methode: Je nach Datenbankgröße können Sie zwischen zwei Methoden wählen:
pg_dump
&psql
– mit einzelner Textdatei: Diese Option ist ideal für kleinere Datenbanken und verwendet eine einzelne Textdatei für den Sicherungs- und Wiederherstellungsvorgang.pg_dump
&pg_restore
– Verwendung mehrerer Kerne: Bei größeren Datenbanken ist diese Methode effizienter, da sie mehrere Kerne verwendet, um den Sicherungs- und Wiederherstellungsvorgang zu verarbeiten.
Befehle zum Kopieren und Einfügen: Das Portal bietet direkt verwendbare
pg_dump
- undpsql
- oderpg_restore
-Befehle. In diese Befehle sind bereits Werte für den von Ihnen ausgewählten Server und die Datenbank eingesetzt. Kopieren Sie diese Befehle, und fügen Sie sie ein.
Voraussetzungen
Wenn Sie einen Einzelserver verwenden oder keinen Zugriff auf das Portal für Flexibler Server haben, lesen Sie diese Dokumentationsseite. Sie enthält ähnliche Informationen wie die, die dem auf dem Blatt „Verbinden“ für Flexibler Server im Portal angezeigt werden.
Hinweis
Da die Dienstprogramme pg_dump
, psql
, pg_restore
und pg_dumpall
alle auf libpq angewiesen sind, können Sie alle bereitgestellten unterstützten Umgebungsvariablen nutzen. Alternativ können Sie die Kennwortdatei verwenden, um zu vermeiden, dass Sie jedes Mal, wenn Sie einen dieser Befehle ausführen, zur Eingabe des Kennworts aufgefordert werden.
Zum Ausführen der Schritte in dieser Anleitung benötigen Sie Folgendes:
- Einen Azure Database for PostgreSQL-Server mit Firewallregeln, um den Zugriff zu ermöglichen.
- pg_dump, psql, pg_restore und pg_dumpall für den Fall, dass Sie mit Rollen und Berechtigungen migrieren möchten, Befehlszeilenprogramme installiert.
- Festlegen des Speicherorts für die Sicherung: Wählen Sie den Speicherort aus, von dem aus Sie die Sicherung ausführen möchten. Dies kann an verschiedenen Speicherorten erfolgen, z. B. einer separaten VM, Cloudshell (wo die Befehlszeilenprogramme bereits installiert sind, aber möglicherweise nicht in der entsprechenden Version vorhanden sind, überprüfen Sie daher immer die verwendete Version, z. B.
psql --version
) oder Ihr eigener Laptop. Beachten Sie immer die Entfernung und Latenz zwischen dem PostgreSQL-Server und dem Speicherort, an dem Sie die Sicherung oder Wiederherstellung ausführen.
Wichtig
Es ist wichtig, die Hilfsprogramme pg_dump
, psql
, pg_restore
und pg_dumpall
zu verwenden, die entweder dieselbe Hauptversion oder eine höhere Hauptversion als der Datenbankserver haben, zu oder von dem Sie Daten exportieren oder importieren. Andernfalls kann dies zu einer nicht erfolgreichen Datenmigration führen. Wenn Ihr Zielserver über eine höhere Hauptversion als der Quellserver verfügt, verwenden Sie Hilfsprogramme, die entweder dieselbe oder einer höhere Hauptversion als der Zielserver haben.
Hinweis
Es ist wichtig zu beachten, dass pg_dump
jeweils nur eine Datenbank exportieren kann. Diese Einschränkung gilt unabhängig von der gewählten Methode, ob eine einzelne Datei oder mehrere Kerne verwendet werden.
Sichern von Benutzern und Rollen mit pg_dumpall -r
pg_dump
wird verwendet, um eine PostgreSQL-Datenbank in eine Sicherungsdatei zu extrahieren. Es ist jedoch wichtig zu verstehen, dass pg_dump
keine Rollen oder Benutzerdefinitionen sichert, da diese in der PostgreSQL-Umgebung als globale Objekte betrachtet werden. Für eine umfassende Migration, einschließlich Benutzer und Rollen, müssen Sie pg_dumpall -r
verwenden.
Mit diesem Befehl können Sie alle Rollen- und Benutzerinformationen aus Ihrer PostgreSQL-Umgebung erfassen. Wenn Sie innerhalb von Datenbanken auf demselben Server migrieren, können Sie diesen Schritt überspringen und zum Abschnitt Erstellen einer neuen Datenbank wechseln.
pg_dumpall -r -h <server name> -U <user name> > roles.sql
Wenn Sie beispielsweise einen Server mit dem Namen mydemoserver
und ein Benutzer mit dem Namen myuser
haben, führen Sie den folgenden Befehl aus:
pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql
Wenn Sie einen einzelnen Server verwenden, enthält Ihr Benutzername die Servernamenkomponente. Verwenden Sie daher myuser@mydemoserver
anstelle von myuser
.
Sichern von Rollen auf einem flexiblen Server
In einer Umgebung mit flexiblem Server bedeuten erweiterte Sicherheitsmaßnahmen, dass Benutzer keinen Zugriff auf die Tabelle „pg_authid“ haben, in der Rollenkennwörter gespeichert werden. Diese Einschränkung wirkt sich darauf aus, wie Sie eine Rollensicherung ausführen, da der Standardbefehl pg_dumpall -r
versucht, auf diese Tabelle für Kennwörter zuzugreifen, und aufgrund fehlender Berechtigungen fehlschlägt.
Wenn Sie Rollen von einem flexiblen Server sichern, ist es wichtig, die Option --no-role-passwords
in Ihren pg_dumpall
-Befehl einzuschließen. Diese Option verhindert, dass pg_dumpall
versucht, auf die pg_authid
-Tabelle zuzugreifen, die aufgrund von Sicherheitseinschränkungen nicht gelesen werden kann.
Verwenden Sie den folgenden Befehl, um Rollen von einem flexiblen Server erfolgreich zu sichern:
pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql
Wenn Sie beispielsweise einen Server mit dem Namen mydemoserver
und einen Benutzer mit dem Namen myuser
haben, führen Sie den folgenden Befehl aus:
pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql
Bereinigen der Rollensicherung
Bei der Migration der Ausgabedatei kann roles.sql
bestimmte Rollen und Attribute einschließen, die in der neuen Umgebung nicht anwendbar oder zulässig sind. Das müssen Sie beachten:
Entfernen von Attributen, die nur von Superusern festgelegt werden können: Wenn Sie zu einer Umgebung migrieren, in der Sie keine Superuserberechtigungen besitzen, entfernen Sie Attribute wie
NOSUPERUSER
undNOBYPASSRLS
aus der Rollensicherung.Ausschließen von dienstspezifischen Benutzern: Schließen Sie Einzelserver-Dienstbenutzer aus, z. B.
azure_superuser
oderazure_pg_admin
. Diese sind spezifisch für den Dienst und werden automatisch in der neuen Umgebung erstellt.
Verwenden Sie den folgenden sed
-Befehl, um die Rollensicherung zu bereinigen:
sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql
Dieser Befehl löscht Zeilen mit azure_superuser
, azure_pg_admin
, azuresu
, mit CREATE ROLE replication
und ALTER ROLE replication
beginnende Zeilen und entfernt die Attribute NOSUPERUSER
und NOBYPASSRLS
aus ALTER ROLE
-Anweisungen.
Erstellen einer Sicherungsdatei, die die zu ladenden Daten enthält
Führen Sie zum Exportieren der lokalen oder auf einem virtuellen Computer vorhandenen PostgreSQL-Datenbank in eine SQL-Skriptdatei den folgenden Befehl in Ihrer vorhandenen Umgebung aus:
pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql
Wenn Sie beispielsweise einen Server mit dem Namen mydemoserver
, einen Benutzer mit dem Namen myuser
und eine Datenbank mit dem Namen testdb
haben, führen Sie den folgenden Befehl aus:
pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql
Wenn Sie einen einzelnen Server verwenden, enthält Ihr Benutzername die Servernamenkomponente. Verwenden Sie daher myuser@mydemoserver
anstelle von myuser
.
Wiederherstellen der Daten in der Zieldatenbank
Wiederherstellen von Rollen und Benutzern
Bevor Sie Ihre Datenbankobjekte wiederherstellen, stellen Sie sicher, dass Sie die Rollen ordnungsgemäß gesichert und bereinigt haben. Wenn Sie innerhalb von Datenbanken auf demselben Server migrieren, müssen Sie Rollen möglicherweise nicht sowohl sichern als auch wiederherstellen. Für Migrationen über verschiedene Server oder Umgebungen hinweg ist dieser Schritt jedoch von entscheidender Bedeutung.
Verwenden Sie den folgenden Befehl, um die Rollen und Benutzer in der Zieldatenbank wiederherzustellen:
psql -f roles.sql -h <server_name> -U <user_name>
Ersetzen Sie <server_name>
durch den Namen Ihres Zielservers und <user_name>
durch Ihren Benutzernamen. Dieser Befehl verwendet das psql
-Hilfsprogramm, um die in der roles.sql
-Datei enthaltenen SQL-Befehle auszuführen. So werden die Rollen und Benutzer effektiv in Ihrer Zieldatenbank wiederhergestellt.
Wenn Sie beispielsweise einen Server mit dem Namen mydemoserver
und einen Benutzer mit dem Namen myuser
haben, führen Sie den folgenden Befehl aus:
psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser
Wenn Sie einen einzelnen Server verwenden, enthält Ihr Benutzername die Servernamenkomponente. Verwenden Sie daher myuser@mydemoserver
anstelle von myuser
.
Hinweis
Wenn Sie bereits über Benutzer mit denselben Namen auf Ihrem Einzelserver oder lokalen Server, von dem Sie migrieren, und auf dem Zielserver verfügen, beachten Sie, dass dieser Wiederherstellungsvorgang möglicherweise die Kennwörter für diese Rollen ändert. Folglich erfordern alle nachfolgenden Befehle, die Sie ausführen müssen, möglicherweise die aktualisierten Kennwörter. Dies gilt nicht, wenn Ihr Quellserver ein flexibler Server ist, da hierfür aufgrund erweiterter Sicherheitsmaßnahmen das Sichern von Kennwörtern für Benutzer nicht zulässig ist.
Erstellen einer neuen Datenbank
Vor dem Wiederherstellen der Datenbank müssen Sie möglicherweise eine neue, leere Datenbank erstellen. Dazu muss der von Ihnen verwendete Benutzer über die Berechtigung CREATEDB
verfügen. Die folgenden beiden Methoden werden häufig verwendet:
Verwenden des
createdb
-Hilfsprogramms Dascreatedb
-Programm ermöglicht die Datenbankerstellung direkt über die Bash-Befehlszeile, ohne sich bei PostgreSQL anzumelden oder die Betriebssystemumgebung zu verlassen. Beispiel:createdb <new database name> -h <server name> -U <user name>
Wenn Sie beispielsweise einen Server mit dem Namen
mydemoserver
und einen Benutzer mit dem Namenmyuser
haben und die neue Datenbanktestdb_copy
erstellen möchten, führen Sie den folgenden Befehl aus:createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
Wenn Sie einen einzelnen Server verwenden, enthält Ihr Benutzername die Servernamenkomponente. Verwenden Sie daher
myuser@mydemoserver
anstelle vonmyuser
.Verwenden des SQL-Befehls Um eine Datenbank mit einem SQL-Befehl zu erstellen, müssen Sie über eine Befehlszeilenschnittstelle oder ein Datenbankverwaltungstool eine Verbindung mit Ihrem PostgreSQL-Server herstellen. Nach der Verbindung können Sie den folgenden SQL-Befehl verwenden, um eine neue Datenbank zu erstellen:
CREATE DATABASE <new database name>;
Ersetzen Sie <new database name>
durch den Namen, den Sie der neuen Datenbank geben möchten. Um beispielsweise eine Datenbank mit dem Namen testdb_copy
zu erstellen, lautet der Befehl wie folgt:
CREATE DATABASE testdb_copy;
Wiederherstellen der Sicherung
Nachdem Sie die Zieldatenbank erstellt haben, können Sie die Daten aus der Sicherungsdatei in dieser Datenbank wiederherstellen. Protokollieren Sie während der Wiederherstellung alle Fehler in einer errors.log
-Datei, und überprüfen Sie deren Inhalt auf Fehler, nachdem die Wiederherstellung durchgeführt wurde.
psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log
Wenn Sie beispielsweise einen Server mit dem Namen mydemoserver
, einen Benutzer mit dem Namen myuser
und eine neue Datenbank mit dem Namen testdb_copy
haben, führen Sie den folgenden Befehl aus:
psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log
Überprüfung nach der Wiederherstellung
Nach Abschluss des Wiederherstellungsvorgangs ist es wichtig, die errors.log
-Datei auf Fehler zu überprüfen, die möglicherweise aufgetreten sind. Dieser Schritt ist entscheidend für die Sicherstellung der Integrität und Vollständigkeit der wiederhergestellten Daten. Beheben Sie alle Probleme, die in der Protokolldatei gefunden wurden, um die Zuverlässigkeit Ihrer Datenbank aufrechtzuerhalten.
Optimieren des Migrationsprozesses
Beim Arbeiten mit großen Datenbanken kann der Sicherungs- und Wiederherstellungsprozess langwierig sein und erfordert möglicherweise eine Optimierung, um Effizienz und Zuverlässigkeit sicherzustellen. Es ist wichtig, sich den verschiedenen Faktoren bewusst zu sein, die sich auf die Leistung dieser Vorgänge auswirken können, und sie zu optimieren.
Ausführliche Anleitungen zum Optimieren des Sicherungs- und Wiederherstellungsprozesses finden Sie im Artikel zu bewährten Methoden für pg_dump und pg_restore. Diese Ressource bietet umfassende Informationen und Strategien, die für die Handhabung großer Datenbanken von Vorteil sein können.
Nächste Schritte
- Bewährte Methoden für pg_dump und pg_restore.
- Weitere Informationen zum Migrieren von Datenbanken zu Azure Database for PostgreSQL finden Sie im Leitfaden zur Datenbankmigration.