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.
postgresql
römisch
quelle
quelle
Antworten:
Aus dem Handbuch :
Sie können also der Sicherung vertrauen. Natürlich ist es PostgreSQL, Sie können Ihren Daten in PostgreSQL vertrauen.
quelle
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.
quelle
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:
Grundsätzlich ist alles, was nach dem
pg_dump
Festlegen der Transaktionsisolationsstufe folgt, nicht Teil dieses Speicherauszugs.Die Lese- / Schreibvorgänge sind während dieser Zeit nicht betroffen (gesperrt).
quelle
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.
quelle