Website-Suche

So sichern und wiederherstellen Sie eine PostgreSQL-Datenbank


In einer Produktionsumgebung ist eine regelmäßige Sicherung ein wesentlicher Aspekt der Datenbankverwaltung, egal wie groß oder klein Ihre PostgreSQL-Datenbank ist. In diesem Artikel erfahren Sie, wie Sie eine PostgreSQL-Datenbank sichern und wiederherstellen.

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.

Lass uns anfangen…

Sichern Sie eine einzelne PostgreSQL-Datenbank

PostgreSQL bietet das Dienstprogramm pg_dump, das Sie beim Sichern von Datenbanken unterstützt. Es generiert eine Datenbankdatei mit SQL-Befehlen in einem Format, das in Zukunft problemlos 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

Der 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 steht, d für ein Archiv im Verzeichnisformat und t bedeutet Archivdatei im TAR-Format: 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 zur Angabe 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 wie gezeigt das Tool pg_dumpall.

pg_dumpall > all_pg_dbs.sql

Sie können den Dump wie gezeigt mit psql wiederherstellen.

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 zum Wiederherstellen von mit pg_dump erstellten Textdateien verwendet, während pg_restore zum Wiederherstellen einer PostgreSQL-Datenbank aus einem mit pg_dump< erstellten Archiv verwendet wird in einem der Nicht-Nur-Text-Formate (benutzerdefiniert, tar oder Verzeichnis).

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

psql tecmintdb < tecmintdb.sql

Wie oben erwähnt, handelt es sich bei einem Dump im benutzerdefinierten Format nicht um ein Skript für psql, daher muss er wie gezeigt mit pg_restore 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 filtern müssen oder einer Ihrer Favoriten:

pg_dump tecmintdb | gzip > tecmintdb.gz

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

pg_dump -F d -j 5 -f tecmintdumpdir

Es ist wichtig zu beachten, dass die parallele Dump-Option die Dump-Zeit verkürzt, andererseits aber auch die Belastung des Datenbankservers erhöht.

Sichern Sie entfernte PostgreSQL-Datenbanken

pg_dump ist ein reguläres PostgreSQL-Client-Tool, es unterstützt Vorgänge auf Remote-Datenbankservern. Um den Remote-Datenbankserver anzugeben, den pg_dump kontaktieren soll, verwenden Sie die Befehlszeilenoptionen -h, um den Remote-Host anzugeben, und -p gibt den Remote-Host an Port, den der Datenbankserver überwacht. Verwenden Sie außerdem das Flag -U, um den Datenbankrollennamen anzugeben, als der eine Verbindung hergestellt werden soll.

Denken Sie daran, 10.10.20.10 und 5432 sowie tecmintdb durch die IP-Adresse oder den Hostnamen Ihres Remote-Hosts, den Datenbank-Port bzw. 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 dass die entsprechende Datenbankauthentifizierungsmethode auf dem Datenbankserver konfiguriert ist. Andernfalls erhalten Sie eine Fehlermeldung wie die im folgenden Screenshot gezeigte.

Es ist auch möglich, eine Datenbank direkt von einem Server auf einen anderen zu sichern. Verwenden Sie dazu wie gezeigt die Dienstprogramme pg_dump und psql.

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

Automatische Sicherung der PostgreSQL-Datenbank mithilfe eines Cron-Jobs

Mithilfe von cron-Jobs können Sie in regelmäßigen Abständen Sicherungen durchführen. Cron-Jobs sind ein häufig verwendetes Mittel zum Planen verschiedener Arten von Aufgaben, 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 jedes 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 Jobs ohne Neustart. Und dieser Cron-Job wird jeden Tag um Mitternacht ausgeführt, es ist eine Minimallösung für die Backup-Aufgabe.

Weitere Informationen zum Planen von Cron-Jobs finden Sie unter: So erstellen und verwalten Sie Cron-Jobs unter Linux

Das war es fürs Erste! Es ist eine gute Idee, die Datensicherung zu einem Teil Ihrer Datenbankverwaltungsroutine zu machen. Wenn Sie Fragen oder Kommentare haben, können Sie uns über das unten stehende Feedback-Formular erreichen. Weitere Informationen finden Sie auf den Referenzseiten pg_dump und pg_restore.