Auf einem PostgreSQL v9.0 habe ich ein WAL-Archivierungssystem. WAL-Dateien werden also regelmäßig archiviert (wenn 3 WAL erstellt werden oder wenn eine WAL älter als 15 Minuten ist).
Jetzt füge ich ein Binärpaket des PG_DATA-Verzeichnisses hinzu (mit Ausnahme des Unterverzeichnisses pg_xlog). Dazu führe ich eine pg_start_backup(),
binäre Kopie durch und a pg_stop_backup()
.
Ich denke, ich verstehe ziemlich gut, was die pg_start_backup und pg_stop_backup tun, die erste einen Checkpoint machen und die letzte sicherstellen, dass die letzte WAL-Datei archiviert wird.
Aus der offiziellen Dokumentation können wir ersehen, dass wir für die binäre Datenkopie:
Führen Sie die Sicherung mit einem geeigneten Dateisystem-Sicherungsprogramm wie tar oder cpio durch (nicht pg_dump oder pg_dumpall). Es ist weder notwendig noch wünschenswert, den normalen Betrieb der Datenbank zu beenden, während Sie dies tun.
Also bin ich ziemlich ratlos. Dies bedeutet, dass ein Checkpoint durchgeführt werden kann, während die Kopie erstellt wird. Ich habe eine Menge Dokumentation gesehen, die besagt, dass der Kopierbefehl Datenänderungen während der Ausführung des Kopiervorgangs zulassen soll. Ich bin damit einverstanden, einfach eine Frage der Suche nach dem richtigen Werkzeug. Aber meine Frage ist, wie postgreSQL die Wiederherstellung mit einem pg_data-Inhalt handhabt, der einige Dateien enthält, die inkonsistent sind (einige vor dem Checkpoint, einige von danach)?
Durch die Wiedergabe der Transaktionsprotokolle kann Postgresql alle diese Dateien in den richtigen Zustand versetzen? Ich habe gesehen, dass das Erstellen von Tabellen und das Löschen von Vorgängen während der Sicherung gefährlich sind. Gibt es nicht gefährliche Vorgänge wie Vakuumbefehle ? Unterbricht der pg_backup die Vakuumoperationen? Soll ich am Ende des Starts des Binärkopiervorgangs eine Kopie der Datei global / pg_control erstellen? Sollte ich ein Snapshot-fähiges Dateisystem verwenden (wie bei einem xfs-freeze), um einen schnelleren Wiederherstellungsprozess zu erhalten?
Ich habe festgestellt, dass ein Absturz des Backup-Skripts ein pg_stop_backup nicht automatisch startet. Daher besteht die Möglichkeit, dass mein Backup-Status lange anhält (bis mein Nagios irgendwo anruft, um das pg_stop_backup () zu reparieren). Wenn sich also in PostgreSQL etwas zwischen diesen beiden Befehlen unterscheidet, würde ich es gerne wissen, um zu verstehen, welche Auswirkungen es haben könnte.
Erleuchte mich bitte.