pg-clusterbackup — Automatisches Multi-Cluster-Backup für PostgreSQL
Automatische, generationsbasierte Sicherung aller Datenbanken über alle laufenden PostgreSQL-Cluster und -Instanzen auf einem Host — ohne manuelle Konfiguration einzelner Datenbanklisten. Verfügbar als identisch spezifizierte Implementierungen in PHP, Bash und PowerShell.
🚀 Open Source auf GitHub
Vollständig quelloffen unter MIT-Lizenz. Multi-Cluster-Erkennung, parallele Dumps, automatische Generations-Rotation und Ausführungsberichte per Mail.
🎓 Inhouse-Training & Praxis
Lernen Sie professionelle Backup- & Desaster-Recovery-Strategien, PITR, Autovacuum-Tuning und Hochverfügbarkeit im Praxis-Seminar.
Das Problem: Warum Standard-Backups scheitern
Klassische Backup-Skripte gehen typischerweise von einem einzigen Datenbankserver mit einer fest hinterlegten Liste von Datenbanknamen aus. In gewachsenen Linux- und Windows-Umgebungen sieht die Realität jedoch häufig anders aus:
- Parallele Major-Versionen: Auf Debian/Ubuntu-Systemen (via
postgresql-common) oder RHEL-Derivaten laufen oft mehrere PostgreSQL-Versionen (z. B. PostgreSQL 14, 16 und 17) zeitgleich nebeneinander auf unterschiedlichen Ports. - Dynamische Datenbanken: Entwickler oder Applikationen legen neue Datenbanken an. Wenn ein Backup-Skript eine statische Liste abarbeitet, werden neue Datenbanken schlicht vergessen.
- Globals-Falle: Ein
pg_dumpeinzelner Datenbanken sichert keine globalen Objekte (Rollen, Benutzer, Passwörter, Tablespaces). Ohnepg_dumpall --globals-onlyscheitert ein späterer Restore auf einem neuen System. - Monolithische All-in-One-Dumps: Ein einzelner Gesamtdump über alle Datenbanken blockiert Ressourcen und verhindert das gezielte Wiederherstellen einer einzelnen Tabelle oder Mandantendatenbank.
pg-clusterbackup löst all diese Probleme in einem einzigen, wartungsfreien Cron-Job.
Funktionsumfang & Kernkonzepte
Das Tool fragt direkt das Betriebssystem ab, welche PostgreSQL-Instanzen tatsächlich aktiv sind, ermittelt alle enthaltenen Datenbanken dynamisch und sichert jede Datenbank isoliert:
- Automatische Cluster- und Instanzerkennung:
- Debian / Ubuntu: Nutzt
pg_lsclusterszur automatischen Erkennung aller aktiven Cluster, Versionen und Socket-Pfade. - RHEL / CentOS / Rocky / AlmaLinux: Scannt Datenverzeichnisse über konfigurierbare Pfadmuster (
/var/lib/pgsql/*/data). - Windows: Erkennt PostgreSQL-Dienste über die Windows-Dienstverwaltung oder portable Installationen.
- Granulare Sicherung (Einzel-Dumps):
Jede Datenbank wird einzeln per pg_dump -Fc (Custom Format) gesichert. Das ermöglicht punktuelle Restores einzelner Datenbanken, ohne riesige SQL-Dumps parsen zu müssen.
- Globals separat:
Für jeden Cluster werden globale Rollen und Berechtigungen separat via pg_dumpall -g als globals.sql abgelegt.
- Parallele Dumps (
-j):
Unterstützt parallele Dumps mehrerer Datenbanken gleichzeitig pro Cluster, um Backup-Fenster auf Multi-Core-Systemen drastisch zu verkürzen.
- Generations-Rotation (
-n):
Veraltete Backup-Generationen werden automatisch gelöscht — aber erst nach erfolgreichem Durchlauf der aktuellen Sicherung.
- Sicherheit & Zuverlässigkeit:
- Exklusiver Lock-Mechanismus verhindert parallele Überschneidungen bei langen Backup-Läufen.
- Sicheres Verschieben von temporären Verzeichnissen auf das endgültige Backup-Ziel (auch über Dateisystem- und Festplattengrenzen hinweg).
- Restriktive
umask(077) auf Linux schützt sensible Dump-Dateien vor unberechtigtem Lesezugriff. - Detaillierte Ausführungsberichte inklusive Laufzeiten und Dateigrößen per E-Mail.
Verzeichnisstruktur der Sicherung
Die Dumps werden nach Datum, PostgreSQL-Version und Cluster strukturiert abgelegt:
/data/backup/postgresql/
├── 20260909/
│ ├── 16/
│ │ └── main/
│ │ ├── globals.sql
│ │ ├── app_production.cus
│ │ └── analytics.cus
│ └── 17/
│ └── testing/
│ ├── globals.sql
│ └── staging_db.cus
└── 20260908/
└── ...
Einzelne Datenbank wiederherstellen
Dank des Custom Formats (.cus) kann eine Datenbank mit einem einzigen Befehl wiederhergestellt werden:
pg_restore -h /var/run/postgresql -p 5432 -d app_production /data/backup/postgresql/20260909/16/main/app_production.cus
Schnellstart: Installation & Konfiguration
Wählen Sie die Implementierung, die am besten in Ihre Serverlandschaft passt. Alle drei Versionen verhalten sich exakt nach der gleichen Spezifikation (SPEC.md).
1. Script herunterladen
PHP:
curl -O https://raw.githubusercontent.com/glueck-it/pg-clusterbackup/v1.6.0/php/pg_clusterbackup.php
chmod +x pg_clusterbackup.php
Bash:
curl -O https://raw.githubusercontent.com/glueck-it/pg-clusterbackup/v1.6.0/bash/pg_clusterbackup.sh
chmod +x pg_clusterbackup.sh
PowerShell (Windows / Linux):
Invoke-WebRequest https://raw.githubusercontent.com/glueck-it/pg-clusterbackup/v1.6.0/powershell/pg_clusterbackup.ps1 -OutFile pg_clusterbackup.ps1
2. Einstellungen einmalig konfigurieren
Mit dem Parameter --ini-write (bzw. -IniWrite) speichern Sie Ihre Einstellungen dauerhaft in der pg_clusterbackup.ini:
./pg_clusterbackup.php -D /data/backup/postgresql --email admin@example.com -n 14 -j 4 --ini-write
Ab jetzt genügt der einfache Aufruf (z. B. im täglichen Cron-Job um 02:30 Uhr):
30 2 * * * root /opt/pg-clusterbackup/pg_clusterbackup.php
Häufige Fragen (FAQ)
Welche PostgreSQL-Versionen werden unterstützt?
pg-clusterbackup unterstützt alle modernen PostgreSQL-Versionen ab PostgreSQL 10 bis einschließlich PostgreSQL 17 und 18+. Da das Tool die offiziellen Client-Utilities (pg_dump, pg_dumpall, pg_lsclusters) des Hosts verwendet, ist es versionsunabhängig einsetzbar.
Wie unterscheidet sich das Tool von pgBackRest oder Barman?
pgBackRest und Barman sind hochspezialisierte Werkzeuge für physische Base-Backups und kontinuierliche Point-in-Time Recovery (PITR) über WAL-Archive. pg-clusterbackup ist die schlanke, logische Ergänzung dazu: Es erzeugt portable, versionsübergreifend lesbare Einzel-Dumps, aus denen Entwickler oder DBAs einzelne Datenbanken oder Schemata binnen Sekunden auf jedem beliebigen Rechner einspielen können.
Kann das Skript auf Windows eingesetzt werden?
Ja. Die PowerShell-Version (pg_clusterbackup.ps1) sowie die PHP-Version laufen nativ unter Windows. PostgreSQL-Instanzen werden über den Windows-Dienstmanager oder das Standard-Installationsverzeichnis (C:\Program Files\PostgreSQL) automatisch erkannt.
Wo finde ich den Quellcode und Dokumentation?
Das vollständige Projekt mit Changelog, Beispielen und Spezifikation finden Sie direkt auf GitHub: https://github.com/glueck-it/pg-clusterbackup.
Passende Seminare & Beratung
Die Sicherung ist nur der erste Schritt. In unseren praxisorientierten Seminaren vertiefen wir Betrieb, Performance und Hochverfügbarkeit von PostgreSQL: