Website-Suche

Sichern und Wiederherstellen einer PostgreSQL-Datenbank


Unabhängig davon, wie groß oder klein Ihre PostgreSQL-Datenbank in einer Produktionsumgebung sein mag, ist eine regelmäßige Sicherung ein wesentlicher Aspekt der Datenbankverwaltung. In diesem Artikel erfahren Sie, wie Sie eine PostgreSQL-Datenbank sichern und wiederherstellen können.

Wir gehen davon aus, dass Sie bereits über eine funktionierende Installation des PostgreSQL-Datenbanksystems verfügen. Wenn nicht, lesen Sie unsere folgenden Artikel, um PostgreSQL auf Ihrer Linux-Distribution zu installieren.

Fangen wir an...

Sichern einer einzelnen PostgreSQL-Datenbank

PostgreSQL bietet das pg_dump Dienstprogramm, mit dem Sie Datenbanken sichern können. Es generiert eine Datenbankdatei mit SQL-Befehlen in einem Format, das in Zukunft leicht wiederhergestellt werden kann.

Um eine PostgreSQL-Datenbank zu sichern, melden Sie sich zunächst bei Ihrem Datenbankserver an, wechseln Sie dann zum Postgres-Benutzerkonto und führen Sie pg_dump wie folgt aus (ersetzen Sie tecmintdb durch den Namen der Datenbank, die Sie sichern möchten). Standardmäßig ist das Ausgabeformat eine Nur-Text-SQL-Skriptdatei.

$ pg_dump tecmintdb > tecmintdb.sql

Das pg_dump unterstützt auch andere Ausgabeformate. Sie können das Ausgabeformat mit der Option -F angeben, wobei c für eine Archivdatei im benutzerdefinierten Format, d für ein Archiv im Verzeichnisformat und t für eine Archivdatei im tar-Format steht: Alle Formate sind für die Eingabe in pg_restore geeignet.

Zum Beispiel:

$ pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

Um die Ausgabe im Verzeichnisausgabeformat auszugeben, verwenden Sie das Flag -f (das zum Angeben der Ausgabedatei verwendet wird), um das Zielverzeichnis anstelle einer Datei anzugeben. Das Verzeichnis, das von pg_dump erstellt wird, darf nicht existieren.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

Um alle PostgreSQL-Datenbanken zu sichern, verwenden Sie das Tool pg_dumpall wie gezeigt.

$ pg_dumpall > all_pg_dbs.sql

Sie können das Speicherabbild mit psql wiederherstellen, wie gezeigt.

$ psql -f all_pg_dbs.sql postgres

Wiederherstellen einer PostgreSQL-Datenbank

Um eine PostgreSQL-Datenbank wiederherzustellen, können Sie die Dienstprogramme psql oder pg_restore verwenden. psql wird verwendet, um Textdateien wiederherzustellen, die von pg_dump erstellt wurden, während pg_restore verwendet wird, um eine PostgreSQL-Datenbank aus einem von pg_dump erstellten Archiv in einem der Nicht-Nur-Text-Formate (custom, tar oder directory) wiederherzustellen.

Hier ist ein Beispiel für die Wiederherstellung eines Nur-Text-Datei-Dumps:

$ psql tecmintdb < tecmintdb.sql

Wie oben erwähnt, ist ein Dump in einem benutzerdefinierten Format kein Skript für psql, daher muss es mit pg_restore wie gezeigt wiederhergestellt werden.

$ pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

Komprimierte PostgreSQL-Datenbanksicherung

Wenn die Datenbank, die Sie sichern, groß ist und Sie eine relativ kleinere Ausgabedatei generieren möchten, können Sie einen komprimierten Dump ausführen, bei dem Sie die Ausgabe von pg_dump über ein Komprimierungstool wie gzip oder eines Ihrer Favoriten filtern müssen:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Wenn die Datenbank extrem groß ist, können Sie einen parallelen Speicherauszug durchführen, indem Sie number_of_jobs Tabellen gleichzeitig mit dem Flag -j ausgeben, wie gezeigt.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Es ist wichtig zu beachten, dass die Option für den parallelen Dump die Zeit des Dumps reduziert, aber auf der anderen Seite auch die Last auf dem Datenbankserver erhöht.

Sichern von Remote-PostgreSQL-Datenbanken

pg_dump es sich um ein reguläres PostgreSQL-Client-Tool handelt, unterstützt es Operationen auf entfernten Datenbankservern. Um den entfernten Datenbankserver anzugeben, mit dem pg_dump Kontakt aufnehmen soll, verwenden Sie die Befehlszeilenoptionen -h, um den entfernten Host anzugeben, und -p gibt den entfernten Port an, an dem der Datenbankserver empfangsbereit ist. Verwenden Sie außerdem das Flag -U, um den Namen der Datenbankrolle anzugeben, mit der eine Verbindung hergestellt werden soll.

Denken Sie daran, 10.10.20.10 und 5432 und tecmintdb durch die IP-Adresse Ihres Remote-Hosts bzw. den Hostnamen, den Datenbankport und den Datenbanknamen zu ersetzen.

$ pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

Stellen Sie sicher, dass der Benutzer, der eine Remoteverbindung herstellt, über die erforderlichen Berechtigungen für den Zugriff auf die Datenbank verfügt und die entsprechende Datenbankauthentifizierungsmethode auf dem Datenbankserver konfiguriert ist, da andernfalls ein Fehler wie im folgenden Screenshot angezeigt wird.

Es ist auch möglich, eine Datenbank direkt von einem Server auf einen anderen zu übertragen, indem Sie die Dienstprogramme pg_dump und psql verwenden, wie gezeigt.

$ pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Automatisches Sichern der PostgreSQL-Datenbank mit einem Cron-Job

Sie können Backups in regelmäßigen Abständen mit Cronjobs durchführen. Cron-Jobs sind ein häufig verwendetes Mittel zum Planen verschiedener Arten von Tasks, die auf einem Server ausgeführt werden sollen.

Sie können einen Cron-Job konfigurieren, um die Sicherung der PostgreSQL-Datenbank wie folgt zu automatisieren. Beachten Sie, dass Sie die folgenden Befehle als PostgreSQL-Superuser ausführen müssen:

$ mkdir -p /srv/backups/databases

Führen Sie als Nächstes den folgenden Befehl aus, um die crontab zu bearbeiten und einen neuen Cron-Job hinzuzufügen.

$ crontab -e

Kopieren Sie die folgende Zeile und fügen Sie sie am Ende der crontab ein. Sie können eines der oben erläuterten Dump-Formate verwenden.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Speichern Sie die Datei und beenden Sie den Vorgang.

Der Cron-Dienst beginnt automatisch mit der Ausführung dieses neuen Auftrags ohne Neustart. Und dieser Cron-Job wird jeden Tag um Mitternacht ausgeführt, er ist eine minimale Lösung für die Backup-Aufgabe.

Weitere Informationen zum Planen von Cronjobs finden Sie unter: Erstellen und Verwalten von Cronjobs unter Linux

Das war's fürs Erste! Es ist eine gute Idee, das Sichern von Daten zu einem Teil Ihrer Datenbankverwaltungsroutine zu machen. Um uns bei Fragen oder Kommentaren zu erreichen, verwenden Sie bitte das untenstehende Feedback-Formular. Weitere Informationen finden Sie auf den Referenzseiten pg_dump und pg_restore.

Verwandte Artikel: