Migrieren Ihrer PostgreSQL-Datenbank durch Sichern und Wiederherstellen
GILT FÜR: Azure Database for PostgreSQL – Single Server Azure Database for PostgreSQL – Flexible Server
Sie können mit pg_dump eine PostgreSQL-Datenbank in eine Sicherungsdatei extrahieren. Die Methode zum Wiederherstellen der Datenbank hängt vom Format des ausgewählten Dumps ab. Wenn Ihr Dump mit dem einfachen Format (der Standard -Fp
ist, also keine bestimmte Option angegeben werden muss), wird die einzige Option zum Wiederherstellen mithilfe von psql verwendet, da sie eine Nur-Textdatei ausgibt. Für die anderen drei Dumpmethoden: benutzerdefiniert, verzeichnis und tar sollten 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 Windows-Subsystem für Linux (WSL), Azure Cloud Shell und andere bashkompatible Schnittstellen. Stellen Sie sicher, dass Sie ein Bash-Terminal verwenden, um die Schritte auszuführen und die in diesem Handbuch beschriebenen Befehle auszuführen. Die Verwendung einer anderen Art von Terminal- oder Shellumgebung kann zu Unterschieden im Befehlsverhalten führen und möglicherweise nicht zu den beabsichtigten Ergebnissen führen.
In diesem Artikel konzentrieren wir uns auf einfache (Standard) und Verzeichnisformate. Das Verzeichnisformat ist nützlich, da es Ihnen ermöglicht, mehrere Kerne für die Verarbeitung zu verwenden, wodurch die Effizienz erheblich verbessert werden kann, insbesondere für große Datenbanken.
Die Azure-Portal optimiert diesen Prozess über das blatt Verbinden, indem vorkonfigurierte Befehle angeboten werden, die auf Ihren Server zugeschnitten sind, wobei Werte durch Ihre Benutzerdaten ersetzt werden. Es ist wichtig zu beachten, dass das Blatt Verbinden nur für Azure-Datenbank für PostgreSQL verfügbar ist – flexibler Server und nicht für Single Server. Hier erfahren Sie, wie Sie dieses Feature verwenden können:
Access Azure-Portal: Wechseln Sie zuerst zum Azure-Portal, und wählen Sie das Blatt Verbinden aus.
Wählen Sie Ihre Datenbank aus: Im Blatt Verbinden finden Sie eine Dropdownliste Ihrer Datenbanken. Wählen Sie die Datenbank aus, aus der Sie ein Dump ausführen möchten.
Wählen Sie die entsprechende Methode aus: Je nach Datenbankgröße können Sie zwischen zwei Methoden wählen:
pg_dump
&psql
- Mit Singular-Textdatei: Ideal für kleinere Datenbanken verwendet diese Option eine einzelne Textdatei für den Dump- und Wiederherstellungsvorgang.pg_dump
&pg_restore
- Verwendung mehrerer Kerne: Bei größeren Datenbanken ist diese Methode effizienter, da sie mehrere Kerne verwendet, um den Speicherabbild- und Wiederherstellungsvorgang zu verarbeiten.
Befehle zum Kopieren und Einfügen: Das Portal bietet Ihnen die Möglichkeit, Sie zu verwenden
pg_dump
undpsql
oderpg_restore
Befehle einzufügen. Diese Befehle enthalten bereits Werte, die nach dem von Ihnen ausgewählten Server und der datenbank ersetzt wurden. Kopieren Sie diese Befehle, und fügen Sie sie ein.
Voraussetzungen
Wenn Sie einen einzelnen Server verwenden oder keinen Zugriff auf das Flexible Server-Portal haben, lesen Sie diese Dokumentationsseite. Sie enthält Informationen, die dem im Blatt Verbinden für flexiblen Server im Portal angezeigt 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, falls Sie mit Rollen und Berechtigungen migrieren möchten, werden Befehlszeilenprogramme installiert.
- Entscheiden Sie sich für den Speicherort für das Dump: Wählen Sie den Speicherort aus, von dem aus Sie das Dump ausführen möchten. Dies kann von verschiedenen Speicherorten erfolgen, z. B. einer separaten VM, cloud shell (wo die Befehlszeilenprogramme bereits installiert sind, aber möglicherweise nicht in der entsprechenden Version enthalten sind, also immer die Version verwenden,
psql --version
z. B. ) oder Ihren eigenen Laptop überprüfen. Beachten Sie immer die Entfernung und Latenz zwischen dem PostgreSQL-Server und dem Speicherort, von dem Sie das Dump oder die Wiederherstellung ausführen.
Wichtig
Es ist wichtig, die pg_dump
Hilfsprogramme und psql
Hilfsprogramme zu verwenden, pg_restore
pg_dumpall
die eine der gleichen Hauptversion oder eine höhere Hauptversion sind als der Datenbankserver, in den Sie Daten exportieren oder in diese 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 die gleiche Hauptversion oder höher als der Zielserver sind.
Hinweis
Es ist wichtig zu beachten, dass pg_dump
jeweils nur eine Datenbank exportiert werden kann. Diese Einschränkung gilt unabhängig von der gewählten Methode, unabhängig davon, ob sie eine Singulardatei oder mehrere Kerne verwendet.
Dumping von Benutzern und Rollen mit pg_dumpall -r
pg_dump
wird verwendet, um eine PostgreSQL-Datenbank in eine Dumpdatei zu extrahieren. Es ist jedoch wichtig zu verstehen, dass pg_dump
keine Rollen oder Benutzerdefinitionen abbilden, da diese als globale Objekte in der PostgreSQL-Umgebung betrachtet werden. Für eine umfassende Migration, einschließlich Benutzer und Rollen, müssen Sie verwenden pg_dumpall -r
.
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 " Neue Datenbank erstellen" wechseln.
pg_dumpall -r -h <server name> -U <user name> > roles.sql
Wenn Sie z. B. einen Server mit dem Namen mydemoserver
haben und ein Benutzer mit dem Namen den myuser
folgenden Befehl ausführt:
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 myuser@mydemoserver
daher anstelle von myuser
" .
Dumpingrollen von einem flexiblen Server
In einer flexiblen Serverumgebung bedeuten erweiterte Sicherheitsmaßnahmen, dass Benutzer keinen Zugriff auf die pg_authid Tabelle haben, in der Rollenwörter gespeichert werden. Diese Einschränkung wirkt sich darauf aus, wie Sie ein Rollenabbild ausführen, da der Standardbefehl pg_dumpall -r
versucht, auf diese Tabelle für Kennwörter zuzugreifen und aufgrund fehlender Berechtigung fehlschlägt.
Beim Dumping von Rollen von einem flexiblen Server ist es wichtig, die --no-role-passwords
Option in Ihren pg_dumpall
Befehl einzuschließen. Diese Option verhindert pg_dumpall
den Zugriff auf die pg_authid
Tabelle, die aufgrund von Sicherheitseinschränkungen nicht gelesen werden kann.
Verwenden Sie den folgenden Befehl, um Rollen von einem flexiblen Server erfolgreich abzubilden:
pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql
Wenn Sie z. B. einen Server namens , einen Benutzer mit mydemoserver
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 des Rollenabbilds
Bei der Migration der Ausgabedatei roles.sql
können bestimmte Rollen und Attribute enthalten, die in der neuen Umgebung nicht anwendbar oder zulässig sind. Hier sehen Sie, was Sie berücksichtigen müssen:
Entfernen von Attributen, die nur von Superbenutzern festgelegt werden können: Wenn Sie zu einer Umgebung migrieren, in der Sie keine Superbenutzerberechtigungen besitzen, entfernen Sie Attribute wie
NOSUPERUSER
undNOBYPASSRLS
aus dem Rollenabbild.Ausschließen dienstspezifischer Benutzer: Ausschließen von Einzelserverdienstbenutzern, z
azure_superuser
. B. 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 das Rollenabbild zu sauber:
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
, , azuresu
azure_pg_admin
, Zeilen beginnend mit CREATE ROLE replication
und ALTER ROLE replication
, und entfernt die NOSUPERUSER
Und NOBYPASSRLS
Attribute aus ALTER ROLE
Anweisungen.
Erstellen einer Sicherungsdatei, die die zu ladenden Daten enthält
Um Ihre vorhandene PostgreSQL-Datenbank lokal oder in einer VM in eine SQL-Skriptdatei zu exportieren, führen Sie den folgenden Befehl in Ihrer vorhandenen Umgebung aus:
pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql
Wenn Sie z. B. einen Server namens mydemoserver
, einen Benutzer mit dem Namen myuser
und eine Datenbank haben testdb
, 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 myuser@mydemoserver
daher anstelle von myuser
" .
Wiederherstellen der Daten in der Zieldatenbank
Wiederherstellen von Rollen und Benutzern
Stellen Sie vor dem Wiederherstellen der Datenbankobjekte sicher, dass Sie die Rollen ordnungsgemäß abbilden und sauber. Wenn Sie innerhalb von Datenbanken auf demselben Server migrieren, sind die Rollen und die Wiederherstellung möglicherweise nicht erforderlich. 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 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 und die Rollen und Benutzer effektiv in Ihrer Zieldatenbank wiederherzustellen.
Wenn Sie z. B. einen Server namens , einen Benutzer mit mydemoserver
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 myuser@mydemoserver
daher anstelle von myuser
" .
Hinweis
Wenn Sie bereits Über Benutzer mit denselben Namen auf Ihrem Einzelnen Server oder lokalen Server verfügen, von dem Sie migrieren, und Den Zielserver 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 Flexible Server aufgrund erweiterter Sicherheitsmaßnahmen keine Dumping-Kennwörter für Benutzer zulässt.
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 CREATEDB
Berechtigung verfügen. Hier sind zwei häufig verwendete Methoden:
Die Verwendung
createdb
des 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 z. B. einen Server mit dem Namen haben, einen Benutzer mit
mydemoserver
dem Namenmyuser
und die neue Datenbank, die Sie erstellen möchten, lautettestdb_copy
, 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
myuser@mydemoserver
daher anstelle vonmyuser
" .Mithilfe des SQL-Befehls zum Erstellen einer Datenbank mit einem SQL-Befehl 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>
ihn durch den Namen, den Sie Ihrer neuen Datenbank zuweisen möchten. Um beispielsweise eine Datenbank mit dem Namen testdb_copy
zu erstellen, lautet der Befehl:
CREATE DATABASE testdb_copy;
Wiederherstellen des Dumps
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 bei einer errors.log
Datei, und überprüfen Sie deren Inhalt auf Alle 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 z. B. einen Server namens mydemoserver
, einen Benutzer mit dem Namen myuser
und eine neue Datenbank haben testdb_copy
, 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
Nachdem der Wiederherstellungsprozess abgeschlossen ist, 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 in der Protokolldatei, um die Zuverlässigkeit Ihrer Datenbank zu Standard zu gewährleisten.
Optimieren des Migrationsprozesses
Beim Arbeiten mit großen Datenbanken kann der Speicherabbild- 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 Dump- und Wiederherstellungsprozesses finden Sie in den bewährten Methoden für pg_dump und pg_restore Artikel. 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.