PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So sichern und wiederherstellen Sie eine PostgreSQL-Datenbank

In einer Produktionsumgebung, egal wie groß oder klein Ihr PostgreSQL ist Datenbank sein kann, ist regelmäßiges Backen ein wesentlicher Aspekt der Datenbankverwaltung. In diesem Artikel erfahren Sie, wie Sie eine PostgreSQL-Datenbank sichern und wiederherstellen.

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

  • So installieren Sie PostgreSQL und pgAdmin4 in Ubuntu 20.04
  • So installieren Sie PostgreSQL und pgAdmin in CentOS 8
  • So installieren Sie PostgreSQL und pgAdmin in RHEL 8

Fangen wir an…

Eine einzelne PostgreSQL-Datenbank sichern

PostgreSQL stellt den pg_dump bereit Dienstprogramm, das Ihnen beim Sichern von Datenbanken hilft. Es generiert eine Datenbankdatei mit SQL-Befehlen in einem Format, das in Zukunft einfach wiederhergestellt werden kann.

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

$ pg_dump tecmintdb > tecmintdb.sql

Der pg_dump unterstützt auch andere Ausgabeformate. Das Ausgabeformat können Sie mit -F festlegen Option, wobei c bedeutet Archivdatei im benutzerdefinierten Format, d bedeutet Verzeichnisformatarchiv 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 -f Flag (das zur Angabe der Ausgabedatei verwendet wird), um das Zielverzeichnis anstelle einer Datei anzugeben. Das Verzeichnis, das von pg_dump erstellt wird darf nicht vorhanden sein.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

Um alle PostgreSQL zu sichern Datenbanken verwenden Sie pg_dumpall Werkzeug wie abgebildet.

$ pg_dumpall > all_pg_dbs.sql

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

$ pgsql -f all_pg_dbs.sql postgres

Wiederherstellen einer PostgreSQL-Datenbank

So stellen Sie ein PostgreSQL wieder her Datenbank können Sie die psql verwenden oder pg_restore Dienstprogramme. psql wird verwendet, um Textdateien wiederherzustellen, die von pg_dump erstellt wurden wohingegen pg_restore wird verwendet, um eine PostgreSQL-Datenbank aus einem Archiv wiederherzustellen, das von pg_dump erstellt wurde in einem der Nicht-Klartext-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, ist ein Dump im benutzerdefinierten Format kein Skript für pgsql , also muss es mit pg_restore wiederhergestellt werden wie abgebildet.

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

Sichern Sie große PostgreSQL-Datenbanken

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 filtern müssen über ein Komprimierungstool wie gzip oder einen Ihrer Favoriten:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Wenn die Datenbank sehr groß ist, können Sie parallel sichern, indem Sie number_of_jobs sichern Tabellen gleichzeitig mit dem -j Flagge, wie gezeigt.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Es ist wichtig zu beachten, dass die parallele Dump-Option die Zeit des Dumps reduziert, andererseits aber auch die Last auf dem Datenbankserver erhöht.

Remote-PostgreSQL-Datenbanken sichern

pg_dump ist ein normales PostgreSQL-Client-Tool, das Operationen auf Remote-Datenbankservern unterstützt. Zur Angabe des Remote-Datenbankservers pg_dump kontaktieren soll, verwenden Sie die Kommandozeilenoptionen -h um den Remote-Host und -p anzugeben gibt den entfernten Port an, auf dem der Datenbankserver lauscht. Verwenden Sie außerdem das -U -Flag, um den Namen der Datenbankrolle anzugeben, als die eine Verbindung hergestellt werden soll.

Denken Sie daran, 10.10.20.10 zu ersetzen und 5432 und tecmintdb mit Ihrer Remote-Host-IP-Adresse oder Ihrem Hostnamen, Datenbankport bzw. Datenbanknamen.

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

Stellen Sie sicher, dass der Benutzer, der sich remote verbindet, über die erforderlichen Berechtigungen für den Zugriff auf die Datenbank verfügt und 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 kopieren, verwenden Sie dazu pg_dump und psql Dienstprogramme wie gezeigt.

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

Automatische Sicherung der PostgreSQL-Datenbank mit einem Cron-Job

Mit cron können Sie in regelmäßigen Abständen Backups durchführen Arbeitsplätze. 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 PostgreSQL zu automatisieren Datenbanksicherung wie folgt. 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 beschriebenen Dump-Formate verwenden.

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

Speichern Sie die Datei und beenden Sie sie.

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 minimale Lö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, das Sichern von Daten zu einem Teil Ihrer Datenbankverwaltungsroutine zu machen. Um uns für Fragen oder Kommentare zu erreichen, verwenden Sie das unten stehende Feedback-Formular. Weitere Informationen finden Sie auf den Referenzseiten pg_dump und pg_restore.