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:

  1. Zugreifen auf das Azure-Portal: Wechseln Sie zuerst zum Azure-Portal, und wählen Sie das Blatt „Verbinden“ aus.

    Screenshot der Position des Blatts „Verbinden“ im Azure-Portal.

  2. 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.

    Screenshot der Dropdownliste, in der eine bestimmte Datenbank ausgewählt werden kann.

  3. 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.

    Screenshot mit zwei möglichen Sicherungsmethoden.

  4. Befehle zum Kopieren und Einfügen: Das Portal bietet direkt verwendbare pg_dump- und psql- oder pg_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 und NOBYPASSRLS aus der Rollensicherung.

  • Ausschließen von dienstspezifischen Benutzern: Schließen Sie Einzelserver-Dienstbenutzer aus, z. B. azure_superuser oder azure_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:

  1. Verwenden des createdb-Hilfsprogramms Das createdb-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 Namen myuser haben und die neue Datenbank testdb_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 von myuser.

  2. 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