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.

Zum GitHub-Repository →

🎓 Inhouse-Training & Praxis

Lernen Sie professionelle Backup- & Desaster-Recovery-Strategien, PITR, Autovacuum-Tuning und Hochverfügbarkeit im Praxis-Seminar.

PostgreSQL Administration 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_dump einzelner Datenbanken sichert keine globalen Objekte (Rollen, Benutzer, Passwörter, Tablespaces). Ohne pg_dumpall --globals-only scheitert 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:

  1. Automatische Cluster- und Instanzerkennung:
  • Debian / Ubuntu: Nutzt pg_lsclusters zur 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.
  1. 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.

  1. Globals separat:

Für jeden Cluster werden globale Rollen und Berechtigungen separat via pg_dumpall -g als globals.sql abgelegt.

  1. Parallele Dumps (-j):

Unterstützt parallele Dumps mehrerer Datenbanken gleichzeitig pro Cluster, um Backup-Fenster auf Multi-Core-Systemen drastisch zu verkürzen.

  1. Generations-Rotation (-n):

Veraltete Backup-Generationen werden automatisch gelöscht — aber erst nach erfolgreichem Durchlauf der aktuellen Sicherung.

  1. 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: