Dieses Repository enthält ein strukturiertes Bash-Skript (demo_pg_recover.sh), das den vollständigen Workflow von PostgreSQL Point-in-Time Recovery (PITR) simuliert. Es erstellt einen temporären Test-Cluster, generiert Testdaten, sichert diese Daten mit WAL-Archiven, simuliert ein Desaster und führt anschließend eine Recovery durch, um die Datenintegrität sicherzustellen.
Dieses Skript ist ideal für:
- DevOps Engineers, die PITR-Prozesse automatisieren möchten.
- Datenbankadministratoren (DBAs), die Recovery-Szenarien testen wollen.
- Teams, die Schulungsumgebungen für PostgreSQL Backups und Recovery benötigen.
- Cluster Initialisierung: Temporärer PostgreSQL-Cluster in
/tmp/pgdata_test. - Datenbank & Tabelle erstellen: Testdatenbank und Tabelle mit Beispiel-Datensätzen.
- WAL-Archivierung: Sicherung von Write-Ahead-Logs für PITR.
- Base Backup & Verschlüsselung: Erstellung eines Base Backups und GPG-Verschlüsselung.
- Desaster-Simulation: Löschen von Daten, um eine Recovery-Situation zu simulieren.
- Point-in-Time Recovery (PITR): Wiederherstellung der Daten bis zu einem definierten Zeitpunkt.
- Datenintegrität Prüfung: Sicherstellen, dass alle ursprünglichen Datensätze nach Recovery vorhanden sind.
- Automatischer Cleanup: Entfernt temporäre Cluster, WAL-Archive und Backups nach Testabschluss.
- Linux oder macOS
- PostgreSQL 18 installiert (
/usr/lib/postgresql/18/bin) - Bash
- Schreibrechte im
/tmp-Verzeichnis
chmod +x demo_pg_recover.sh
./demo_pg_recover.shStandardmäßig verwendet das Skript den Port 5433 für den temporären PostgreSQL-Cluster.
Das Skript führt folgende Schritte aus:
- Initialisiert einen temporären PostgreSQL-Cluster.
- Erstellt eine Testdatenbank
testdbund Tabelletesttablemit 10 Datensätzen. - Führt ein WAL-basiertes Base Backup durch und verschlüsselt es optional.
- Simuliert ein Desaster, indem einige Datensätze gelöscht werden.
- Stellt die Datenbank bis zu einem definierten Recovery-Zeitpunkt wieder her.
- Überprüft die Datenintegrität nach der Wiederherstellung.
- Löscht den Testcluster und temporäre Dateien.
Parameter können im Skript angepasst werden:
| Variable | Beschreibung |
|---|---|
PGDATA |
Pfad zum Test-Cluster |
PGPORT |
PostgreSQL Port (Standard: 5433) |
PGUSER |
Benutzer für den Cluster |
BACKUPDIR |
Verzeichnis für Base Backup |
ARCHIVEDIR |
Verzeichnis für WAL-Archive |
DB |
Testdatenbankname |
TABLE |
Testtabelle |
PG_BIN |
Pfad zu PostgreSQL Binaries |
RECOVERY_TIMEOUT |
Max. Wartezeit für Recovery in Sekunden |
GPG_PASSWORD |
Passwort für die GPG-Verschlüsselung des Base Backups |
- Testumgebung läuft isoliert in
/tmp - Benutzerrechte werden für WAL-Replikation temporär gesetzt
- Recovery-Zeitpunkt wird dynamisch auf die aktuelle Uhrzeit gesetzt
- Cleanup entfernt alle temporären Daten, um Konflikte zu vermeiden
- In Produktion sollten GPG-Passwörter niemals im Skript stehen – besser Secret Manager verwenden
✅ Vollständig getestet auf Ubuntu 25.10 mit PostgreSQL 18
MIT License