Führt die Ausführung von pg_dump auf einer Live-Datenbank zu konsistenten Sicherungen?


37

Ich habe eine 3-GB-Datenbank, die ständig geändert wird, und ich muss Sicherungen durchführen, ohne den Server anzuhalten (Postgres 8.3).

Mein pg_dump läuft 5 Minuten. Was passiert, wenn die Daten während des Vorgangs geändert werden? Erhalte ich konsistente Backups? Ich möchte nicht herausfinden, wann eine Katastrophe eintritt.

Die Postgres-Dokumentation http://www.postgresql.org/docs/8.3/static/app-pgdump.html sagt nichts darüber aus.


4
Hallo Roddick. Ich empfehle dringend, Ihren Wiederherstellungsprozess vor einem Katastrophenfall zu testen . Richten Sie einen anderen Computer ein und stellen Sie ihn mit einem Ihrer Backups wieder her, um ihn zu testen.
Derek Downey

Antworten:


53

Aus dem Handbuch :

Es werden konsistente Sicherungen erstellt, auch wenn die Datenbank gleichzeitig verwendet wird.

Sie können also der Sicherung vertrauen. Natürlich ist es PostgreSQL, Sie können Ihren Daten in PostgreSQL vertrauen.


10
Ich LOL buchstäblich, wenn ich lese "Sie können Ihre Daten in PostgreSQL vertrauen" :)
François Beausoleil

Ein Link zum Handbuch wäre nett
Pablo Fernandez

1
@PabloFernandez: Fertig!
Frank Heikens

1
Eine logische Sicherung in einer Live-Datenbank sperrt jedoch Ihre Tabellen. Verpassen Sie diese Informationen nicht. Vielleicht finden Sie einige Tipps: compose.com/articles/…
Tryp

Also bitte, was ist daran so lustig? Sollte ich aufhören, postgresql zu verwenden?
29.

12

pg_dump startet eine Transaktion, ähnlich wie jede andere Abfrage, die lange ausgeführt wird. Die dortigen Konsistenzgarantien stammen aus der MVCC-Implementierung . Der Speicherauszug ist innerhalb dieser Regeln immer selbstkonsistent.

Bei allen Fuzzy-Teilen von MVCC geht es darum, welche Order-UPDATE-Transaktionen für andere Clients sichtbar werden und wie die Sperren erworben werden. pg_dump behandelt die Bestellung streng und erwirbt eine Lesesperre für die gesamte Datenbank, um sie zu sichern. Für die meisten Menschen ist das das, was sie erwarten, und der verwendete Mechanismus verursacht nie irgendwelche Probleme. Das Hauptrisiko besteht darin, dass Clients, die versuchen, die Datenbankstruktur zu ändern, blockiert werden, während der Speicherauszug ausgeführt wird. Dies hat jedoch keinen Einfluss auf die Qualität des Dumps.


11

Der Dump beginnt mit dem Setzen TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Bitte lesen Sie hierzu das Handbuch zur Transaktionsisolation und beispielsweise die Diskussion zur Benutzerliste .

Zitat:

In der Sicherung werden nur Transaktionen angezeigt, die festgeschrieben wurden, bevor die Isolationsstufe festgelegt wurde.

Grundsätzlich ist alles, was nach dem pg_dumpFestlegen der Transaktionsisolationsstufe folgt, nicht Teil dieses Speicherauszugs.

Die Lese- / Schreibvorgänge sind während dieser Zeit nicht betroffen (gesperrt).


-1

Zuerst entschuldige, dass du auf diesen alten Thread geantwortet hast. Aber aus meiner Erfahrung kann ich die Aussage, dass Sie pg_dump / vertrauen können, nicht bestätigen

Ich habe vor einigen Monaten für ein Projekt auf Postgres umgestellt. Und natürlich habe ich alle Backups mit pg_dump vom Live-System wie vorgeschlagen gemacht. Aber nach dem ersten Backup-Check habe ich herausgefunden, dass alle Dumps unterschiedliche Größen haben. Nachdem ich einige von ihnen zufällig wiederhergestellt hatte, stellte ich fest, dass einige Tabellen fehlen. Also begann ich zu analysieren, warum dies passiert, und fand heraus, dass, wenn die überlagernde Anwendung, z. B. App-Server, einige Tabellen sperrt und pg_dump nicht wartet, bis sie freigegeben werden. Ich musste den Server jedes Mal für den Sicherungszeitraum anhalten, was keine gute Lösung ist.

Also suche ich immer noch nach einer Lösung, aber wie gesagt, ich bin überhaupt nicht einverstanden mit der Aussage, dass Sie pg_dump vertrauen können.


Wenn das passiert, wäre es ein ernstes Problem in pg_dump. Welche Version verwendest du? Meine Frage war vor 3 Jahren, und jetzt bin ich auf 9.3 und Amazon Reds, die anscheinend Live-Backups mit pg_dump macht. Sie können sich nicht irren.
Roman

Sie können darauf vertrauen, dass pg_dump eine serialisierte Sicherung durchführt (siehe meine Antwort für Links / Dokumente und einige Details). Während meiner Lektüre habe ich jedoch gelesen, dass Sie die Struktur der Datenbank selbst nicht ändern sollten, obwohl ich nicht tiefer darauf eingehen konnte . Da wir nur Einfügen / Aktualisieren / Löschen durchführen, kann ich keine Kommentare zu Tabellenerstellungen abgeben. Für uns habe ich nur darauf geachtet, während der pg_dump-Zeit keine Tabellen zu erstellen.
Dennis Nolte

2
Ihre Aussagen deuten entweder auf einen schwerwiegenden Fehler (haben Sie einen Fehlerbericht eingereicht?), Einen schwerwiegenden Fehler in der Art und Weise, wie Sie Ihre Datenbank sichern, oder auf ein Missverständnis hin. Ohne Fakten kann man sich nicht entscheiden.
Dezso
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.