Skip to content

wm87/desaster-recovery-pg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

License: MIT PostgreSQL Version PITR Ready

PostgreSQL PITR (Point-in-Time Recovery) - Simulation

Übersicht

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.

Funktionen

  1. Cluster Initialisierung: Temporärer PostgreSQL-Cluster in /tmp/pgdata_test.
  2. Datenbank & Tabelle erstellen: Testdatenbank und Tabelle mit Beispiel-Datensätzen.
  3. WAL-Archivierung: Sicherung von Write-Ahead-Logs für PITR.
  4. Base Backup & Verschlüsselung: Erstellung eines Base Backups und GPG-Verschlüsselung.
  5. Desaster-Simulation: Löschen von Daten, um eine Recovery-Situation zu simulieren.
  6. Point-in-Time Recovery (PITR): Wiederherstellung der Daten bis zu einem definierten Zeitpunkt.
  7. Datenintegrität Prüfung: Sicherstellen, dass alle ursprünglichen Datensätze nach Recovery vorhanden sind.
  8. Automatischer Cleanup: Entfernt temporäre Cluster, WAL-Archive und Backups nach Testabschluss.

Voraussetzungen

  • Linux oder macOS
  • PostgreSQL 18 installiert (/usr/lib/postgresql/18/bin)
  • Bash
  • Schreibrechte im /tmp-Verzeichnis

Nutzung

chmod +x demo_pg_recover.sh
./demo_pg_recover.sh

Standardmäßig verwendet das Skript den Port 5433 für den temporären PostgreSQL-Cluster.

Das Skript führt folgende Schritte aus:

  1. Initialisiert einen temporären PostgreSQL-Cluster.
  2. Erstellt eine Testdatenbank testdb und Tabelle testtable mit 10 Datensätzen.
  3. Führt ein WAL-basiertes Base Backup durch und verschlüsselt es optional.
  4. Simuliert ein Desaster, indem einige Datensätze gelöscht werden.
  5. Stellt die Datenbank bis zu einem definierten Recovery-Zeitpunkt wieder her.
  6. Überprüft die Datenintegrität nach der Wiederherstellung.
  7. Löscht den Testcluster und temporäre Dateien.

Konfiguration

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

Sicherheit & Best Practices

  • 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

Status

✅ Vollständig getestet auf Ubuntu 25.10 mit PostgreSQL 18

Lizenz

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published