So erstellen Sie eine funktionsfähige und vollständige PostgreSQL-Datenbanksicherung und testen diese


45

Ich hatte gehofft, eine klare Antwort darauf zu bekommen, wie sichergestellt werden kann, dass eine vollständige Postgres-Sicherung erstellt wird, wie dies auch bei MS SQL Server der Fall ist, und dann verwaiste Benutzer behandelt werden.

Nach allem, was ich gelesen habe und was falsch sein könnte, war es eine Herausforderung, einen guten PostgreSQL-Blog zu finden. Empfehlen Sie mir bitte einen Blog. Ich muss herausfinden, wie diese App funktioniert, damit ich auf meine Backups und Slony vertrauen kann Replikation. Ich hatte einen Entwickler, der ein Backup, das ich von PgadminIII über custom, directoryund tarformatierte, während ich OIDs auswählte, wiederherstellen ließ , aber er sagte, dass zwei von ihnen nicht geladen wurden, tarsondern nur das Verzeichnis, nicht die Daten. Ich bin jetzt wirklich verwirrt.

  1. Ich benutze PGAdminIII, es hat eine pg_dumpund eine pg_dumpallOption. Ich möchte alles sichern, was ich zum Testen brauche, um diese Datenbank irgendwo wiederherzustellen und zu überprüfen, ob alle Daten, die wir benötigen, und unsere Sicherung in Ordnung sind. Schließlich möchte ich ein Skript für die automatische Wiederherstellung schreiben, jedoch nur einen Tag nach dem anderen.

pg_dumpallAnscheinend hat eine -globalsOption, die alles sichern soll, aber die Hilfe für pg_dumpallzeigt eine -g, --globals-only dump only global objects, no databases, keine --globalsOption.

Ich dachte, ich pg_dumpallwürde zumindest Fremdschlüssel sichern, aber selbst das scheint eine Option zu sein. Laut Dokumentation kann pg_dumpallich -omir nicht vorstellen, wann ich Fremdschlüssel nicht sichern möchte , obwohl ich eine Option zum Sichern von Fremdschlüsseln verwenden muss. Dies ist als Standardoption sinnvoller.

  1. Wie würde ich mich um verwaiste Benutzer kümmern und prüfen, ob ich alles habe? Ich möchte meine Sicherungsdatei auf einem anderen Server wiederherstellen und überprüfen, ob alles funktioniert. Wenn jemand Vorschläge hat, wie man ein echtes Backup in PostgreSQL erstellt und wiederherstellt, wäre ich sehr dankbar.

Ich hatte einen PostgreSQL-Server, kann aber immer noch nicht verstehen, warum die App OIDstandardmäßig keine Backups erstellt ! Es scheint, als ob Sie dies in 99,9% der Fälle wünschen würden.

UPDATE 1:

In der Postgres- Dokumentation wird erwähnt, dass die globalsgesuchte Option in dieser Version eine Standardoption zu sein scheint, sie jedoch weiterhin benötigt -o. Wenn mir jemand einen Beispielbefehl zum Wiederherstellen einer einzelnen Datenbank mit allem, was er benötigt, bestätigen oder geben kann, würde ich das begrüßen.

Bearbeiten: wird von der Site gebeten, die Eindeutigkeit dieser Frage durch Bearbeiten meiner Frage zu verdeutlichen. Diese Frage wirft das Problem auf und gibt Aufschluss über die OIDs in Sicherungen, den Unterschied zwischen globalen und nicht globalen Sicherungen sowie über die Empfehlungen zum Testen von Wiederherstellungen, um sicherzustellen, dass die Sicherung nicht nur gesichert, sondern auch gut ist. Aufgrund der Antworten konnte ich ein Backup erstellen, Globals / Oids herausfinden und jeden Abend einen Testwiederherstellungsprozess auf Postgres mithilfe von Cron-Jobs starten. Danke für die Hilfe!


Antworten:


58

Sie können den gesamten PostgreSQL-Cluster mit pg_dumpall sichern. Das sind alle Datenbanken und alle globalen Daten für einen einzelnen Cluster. Über die Befehlszeile auf dem Server würde ich so etwas tun. (Ich empfange Port 5433, nicht den Standardport.) Möglicherweise benötigen Sie die Option --clean.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Dies umfasst die globalen Daten - Informationen zu Benutzern und Gruppen, Tablespaces usw.

Wenn ich eine einzelne Datenbank sichern und auf einen Arbeitsserver verschieben würde, würde ich die Datenbank mit pg_dump sichern und die globalen Datenbanken mit beiden

  • pg_dumpall --globals-only, oder
  • pg_dumpall --roles-only (wenn Sie nur Rollen benötigen)

so was.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Ausgaben sind nur Textdateien.

Nachdem Sie diese Dateien auf einen anderen Server verschoben haben, laden Sie zuerst die globalen und dann den Datenbankspeicherauszug.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Ich dachte, pg_dumpall würde zumindest Fremdschlüssel sichern, aber selbst das scheint eine "Option" zu sein. Laut: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html muss ich auch mit pg_dumpall die Option -o verwenden, um Fremdschlüssel zu sichern

Nein, in dieser Referenz steht "Verwenden Sie diese Option, wenn Ihre Anwendung in irgendeiner Weise auf die OID-Spalten verweist (z. B. in einer Fremdschlüsseleinschränkung). Andernfalls sollte diese Option nicht verwendet werden." (Hervorhebung hinzugefügt.) Ich halte es für unwahrscheinlich, dass Ihre Anwendung auf die OID-Spalten verweist. Sie müssen diese Option nicht verwenden, um "Fremdschlüssel zu sichern". (Lesen Sie die Dump-Datei in Ihrem Editor oder File Viewer.)


3
Fehlt der Datenbankname nicht in der Zeile, in die sandbox.sql importiert wird? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK

Es wird festgestellt, dass die pg_dumpallVersion 9.5 NULLbei Verwendung von Werten nicht ordnungsgemäß funktioniert COPY. Ich erhalte viele Fehler wie diesen: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.Beim psql -f /tmp/dumpall.sql
Zurückimport
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.