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 -Fpist, 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:

  1. Access Azure-Portal: Wechseln Sie zuerst zum Azure-Portal, und wählen Sie das Blatt Verbinden aus.

    Screenshot showing the placement of Connect blade in Azure portal.

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

    Screenshot showing the dropdown where specific database can be chosen.

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

    Screenshot showing two possible dump methods.

  4. Befehle zum Kopieren und Einfügen: Das Portal bietet Ihnen die Möglichkeit, Sie zu verwenden pg_dump und psql oder pg_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 --versionz. 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_dumpHilfsprogramme und psqlHilfsprogramme zu verwenden, pg_restorepg_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@mydemoserverdaher 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 mydemoserverdem Namen myuserhaben, 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 und NOBYPASSRLS aus dem Rollenabbild.

  • Ausschließen dienstspezifischer Benutzer: Ausschließen von Einzelserverdienstbenutzern, z azure_superuser . B. 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 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, , azuresuazure_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@mydemoserverdaher 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 mydemoserverdem Namen myuserhaben, 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@mydemoserverdaher 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:

  1. Die Verwendung createdb des 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 z. B. einen Server mit dem Namen haben, einen Benutzer mit mydemoserverdem Namen myuser und die neue Datenbank, die Sie erstellen möchten, lautet testdb_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@mydemoserverdaher anstelle von myuser" .

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