15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
01.11.2024

Sicherung und Wiederherstellung von PostgreSQL-Datenbanken: Ein vollständiger Leitfaden für AlexHost-Benutzer

Warum eine PostgreSQL-Backup-Strategie wichtiger ist als Sie denken

Datenverlust ist kein hypothetisches Risiko — es ist eine betriebliche Gewissheit, der sich jeder Datenbankadministrator irgendwann stellen muss. Hardwarefehler, versehentliche Löschungen, beschädigte Transaktionen und Ransomware-Angriffe können eine Produktionsumgebung innerhalb von Sekunden lahmlegen. Für PostgreSQL-Benutzer ist eine robuste, getestete und automatisierte Backup-Strategie der Unterschied zwischen einem kleineren Vorfall und einem katastrophalen Geschäftsausfall.

AlexHost Dedicated Server bieten eine ideale Grundlage für das Hosting und den Schutz von PostgreSQL-Datenbanken. Mit Enterprise-Grade NVMe SSD-Speicher, der außergewöhnlichen I/O-Durchsatz bietet, vollständigem Root-Zugriff für vollständige Konfigurationskontrolle und integriertem DDoS-Schutz bietet AlexHost die Infrastrukturleistung und Sicherheit, die ernsthafte Datenbankworkloads erfordern.

Unabhängig davon, ob Sie eine hochfrequente E-Commerce-Plattform, eine SaaS-Anwendung, eine WordPress-Installation mit einer relationalen Datenbank oder ein benutzerdefiniertes Unternehmenssystem betreiben, führt Sie dieser Leitfaden durch jede wichtige PostgreSQL-Backup- und Wiederherstellungsmethode — von einfachen SQL-Dumps bis zu erweiterten Point-in-Time Recovery (PITR) — alle optimiert für Produktionsumgebungen.

Inhaltsverzeichnis

  1. PostgreSQL-Backup-Optionen verstehen
  2. Voraussetzungen und Berechtigungsanforderungen
  3. Methode 1 — SQL Dump mit pg_dump
  4. Methode 2 — Sicherung aller Datenbanken mit pg_dumpall
  5. Methode 3 — Custom Format Backups für große Datenbanken
  6. Wiederherstellung aus SQL Dumps
  7. Wiederherstellung aus Custom Format Dumps
  8. Methode 4 — Continuous Archiving und Point-in-Time Recovery (PITR)
  9. Automatisierung von Backups mit Cron
  10. Sicherung und Offsite-Speicherung von Backups
  11. Best Practices Zusammenfassung

1. PostgreSQL-Backup-Optionen verstehen

PostgreSQL wird mit mehreren ausgereiften, gut dokumentierten Backup-Mechanismen ausgeliefert. Die Wahl der richtigen hängt von Ihrer Datenbankgröße, Recovery Time Objectives (RTO), Recovery Point Objectives (RPO) und Ihrer Toleranz für operative Komplexität ab.

MethodeAm besten fürVorteileNachteile
SQL Dump (pg_dump)Kleine bis mittlere DatenbankenEinfach, portabel, menschenlesbarLangsam für sehr große DBs
Custom Format DumpMittlere bis große DatenbankenKomprimiert, parallele WiederherstellungBinär, erfordert pg_restore
Dateisystem-SnapshotSehr große DatenbankenSchnell, konsistentErfordert Fachwissen, DB muss stillgelegt oder Snapshot-fähig sein
PITR (WAL Archiving)Geschäftskritische ProduktionssystemeGranulare Point-in-Time-WiederherstellungKomplexes Setup und Wartung

Das Verständnis dieser Kompromisse vor dem Start ist wesentlich. Die meisten Produktionsumgebungen profitieren von der Kombination von mindestens zwei Ansätzen — beispielsweise nächtliche Custom Format Dumps zusammen mit kontinuierlichem WAL Archiving für granulare Wiederherstellungsfähigkeit.

2. Voraussetzungen und Berechtigungsanforderungen

Bevor Sie einen Backup-Vorgang ausführen, bestätigen Sie, dass die folgenden Voraussetzungen erfüllt sind:

Benutzerberechtigungen:

  • Sie müssen ein PostgreSQL Superuser oder der Eigentümer der Zieldatenbank sein, um ein vollständiges Backup durchzuführen.
  • Für pg_dumpall sind Superuser-Berechtigungen erforderlich.

Überprüfen Sie Ihre PostgreSQL-Version:

psql --version

Überprüfen Sie den verfügbaren Speicherplatz vor dem Backup:

df -h /var/lib/postgresql/

Stellen Sie sicher, dass Ihr Backup-Ziel ausreichend freien Speicherplatz hat — mindestens das 1,5-fache der Größe der zu sichernden Datenbank, um temporäre Dateien und Kompressionsaufwand zu berücksichtigen.

Verbinden Sie sich über SSH mit Ihrem Server:

ssh root@your-server-ip

Wenn Sie einen VPS Hosting Plan verwenden, haben Sie vollständigen SSH-Zugriff und die Möglichkeit, PostgreSQL ohne Einschränkungen zu installieren, zu konfigurieren und zu verwalten.

3. Methode 1 — SQL Dump mit pg_dump

Das pg_dump Dienstprogramm ist das am häufigsten verwendete PostgreSQL-Backup-Tool. Es erstellt einen konsistenten Snapshot einer einzelnen Datenbank, auch während die Datenbank aktiv genutzt wird. Die Ausgabe ist ein einfaches SQL-Skript, das überprüft, bearbeitet und auf jeder kompatiblen PostgreSQL-Installation wiedergegeben werden kann.

Schritt 1: Öffnen Sie ein Terminal und greifen Sie auf Ihren Server zu

ssh root@your-alexhost-server-ip

Schritt 2: Führen Sie den pg_dump Befehl aus

pg_dump -U username -W -F p database_name > /backups/backup_file.sql

Parameteraufschlüsselung:

ParameterBeschreibung
-U usernameDer PostgreSQL-Benutzer, der das Backup durchführt
-WPasswort interaktiv abfragen
-F pAusgabeformat: p = einfacher SQL-Text
database_nameDer Name der zu sichernden Datenbank
> /backups/backup_file.sqlAusgabe in eine Datei umleiten

Praktisches Beispiel:

pg_dump -U postgres -W -F p my_production_db > /backups/my_production_db_$(date +%Y%m%d_%H%M%S).sql

> Pro Tipp: Das Anhängen eines Zeitstempels mit $(date +%Y%m%d_%H%M%S) an Ihren Backup-Dateinamen stellt sicher, dass Sie ein vorheriges Backup nie versehentlich überschreiben und erstellt ein natürliches chronologisches Archiv.

Schritt 3: Überprüfen Sie die Backup-Datei

ls -lh /backups/
head -50 /backups/my_production_db_*.sql

Die Datei sollte mit PostgreSQL-Header-Kommentaren und SET Anweisungen beginnen, was ein gültiges Dump bestätigt.

4. Methode 2 — Sicherung aller Datenbanken mit pg_dumpall

Wenn Sie jede Datenbank in einer PostgreSQL-Instanz sichern müssen — einschließlich globaler Objekte wie Rollen und Tablespaces — ist pg_dumpall das richtige Tool.

pg_dumpall -U postgres -W > /backups/all_databases_$(date +%Y%m%d).sql

Dieser Befehl exportiert:

  • Alle Datenbanken
  • Alle Rollen (Benutzer und Gruppen)
  • Alle Tablespaces
  • Alle globale Konfiguration

Wichtig: Die Ausgabedatei von pg_dumpall kann auf ausgelasteten Servern sehr groß sein. Stellen Sie sicher, dass Ihre Backup-Partition ausreichend Speicherplatz hat, und erwägen Sie, die Ausgabe sofort zu komprimieren:

pg_dumpall -U postgres | gzip > /backups/all_databases_$(date +%Y%m%d).sql.gz

5. Methode 3 — Custom Format Backups für große Datenbanken

Für Produktionsdatenbanken, die mehrere Gigabyte überschreiten, wird das Custom Format (-F c) gegenüber einfachen SQL-Dumps dringend empfohlen. Custom Format Backups sind:

  • Standardmäßig komprimiert — reduziert die Speicheranforderungen erheblich
  • Schneller wiederherzustellen — unterstützt parallele Wiederherstellungsvorgänge mit -j Flag
  • Selektiv wiederherstellbar — ermöglicht die Wiederherstellung einzelner Tabellen oder Schemas

Erstellen eines Custom Format Backups

pg_dump -U postgres -W -F c my_production_db > /backups/my_production_db_$(date +%Y%m%d).dump

Erstellen eines komprimierten Directory Format Backups (unterstützt Parallelismus)

pg_dump -U postgres -W -F d -j 4 -f /backups/my_production_db_dir my_production_db
ParameterBeschreibung
-F dDirectory Format — eine Datei pro Tabelle
-j 4Verwenden Sie 4 parallele Worker-Prozesse
-f /path/to/dirAusgabeverzeichnis (darf noch nicht existieren)

Dieser Ansatz reduziert die Backup-Dauer auf Multi-Core-Servern dramatisch, was ihn ideal für die leistungsstarken Dedicated Server Umgebungen bei AlexHost macht.

6. Wiederherstellung aus SQL Dumps

Wiederherstellung einer einzelnen Datenbank aus einem einfachen SQL Dump

Stellen Sie zunächst sicher, dass die Zieldatenbank existiert. Falls nicht, erstellen Sie sie:

psql -U postgres -c "CREATE DATABASE my_restored_db;"

Dann wiederherstellen:

psql -U postgres -d my_restored_db -f /backups/my_production_db_backup.sql

Parameteraufschlüsselung:

ParameterBeschreibung
-U postgresPostgreSQL Superuser
-d my_restored_dbZieldatenbank für Wiederherstellung
-f /path/to/file.sqlPfad zur SQL Dump-Datei

Überwachen Sie den Wiederherstellungsfortschritt

Bei großen SQL-Dateien können Sie den Fortschritt mit pv überwachen:

pv /backups/my_production_db_backup.sql | psql -U postgres -d my_restored_db

7. Wiederherstellung aus Custom Format Dumps

Custom Format Dumps erfordern das pg_restore Dienstprogramm anstelle von psql.

Grundlegende Wiederherstellung

pg_restore -U postgres -d my_restored_db /backups/my_production_db.dump

Wiederherstellung und automatische Datenbankerstellung

Verwenden Sie das -C Flag, um pg_restore anzuweisen, die Datenbank vor dem Füllen zu erstellen:

pg_restore -U postgres -C -d postgres /backups/my_production_db.dump

Parallele Wiederherstellung für schnellere Wiederherstellung

pg_restore -U postgres -d my_restored_db -j 4 /backups/my_production_db_dir/

Die Verwendung von -j 4 mit einem Directory Format Backup kann die Wiederherstellungszeit auf einem Quad-Core-Server um bis zu 75% reduzieren — ein erheblicher Vorteil bei der Minimierung von Ausfallzeiten während der Notfallwiederherstellung.

Wiederherstellung einer bestimmten Tabelle nur

pg_restore -U postgres -d my_restored_db -t orders /backups/my_production_db.dump

Diese granulare Fähigkeit ist einer der Schlüsselvorteile des Custom Formats gegenüber einfachen SQL-Dumps.

8. Methode 4 — Continuous Archiving und Point-in-Time Recovery (PITR)

PITR ist der Gold-Standard für geschäftskritische PostgreSQL-Bereitstellungen. Es ermöglicht Ihnen, Ihre Datenbank zu jedem bestimmten Zeitpunkt wiederherzustellen — nicht nur zum letzten Backup — durch Wiedergabe von Write-Ahead Log (WAL) Segmenten auf einem Basis-Backup. Dies ist wesentlich für Szenarien, in denen Sie sich von einem logischen Fehler (wie einem versehentlichen DROP TABLE) erholen müssen, der zu einem bekannten Zeitstempel aufgetreten ist.

Schritt 1: Aktivieren Sie WAL Archiving in postgresql.conf

Suchen Sie Ihre PostgreSQL-Konfigurationsdatei und bearbeiten Sie sie:

nano /etc/postgresql/15/main/postgresql.conf

Fügen Sie die folgenden Direktiven hinzu oder ändern Sie sie:

# Enable WAL archiving
wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'

Parametererklärung:

ParameterWertBeschreibung
wal_levelreplicaAktiviert ausreichende WAL-Details für Archivierung
archive_modeonAktiviert den Archivierungsprozess
archive_command'cp %p /path/%f'Shell-Befehl zum Kopieren von WAL-Dateien in das Archiv

Erstellen Sie das Archivverzeichnis und legen Sie die richtigen Berechtigungen fest:

mkdir -p /var/lib/postgresql/wal_archive
chown postgres:postgres /var/lib/postgresql/wal_archive
chmod 700 /var/lib/postgresql/wal_archive

Starten Sie PostgreSQL neu, um Änderungen anzuwenden:

systemctl restart postgresql

Schritt 2: Erstellen Sie ein Basis-Backup mit pg_basebackup

pg_basebackup -U postgres -D /backups/base_backup -Ft -z -P -Xs
ParameterBeschreibung
-D /backups/base_backupZielverzeichnis für das Basis-Backup
-FtTar Format Ausgabe
-zMit gzip komprimieren
-PFortschritt anzeigen
-XsWAL während des Backups streamen

Schritt 3: Wiederherstellung zu einem bestimmten Zeitpunkt

So stellen Sie aus einem Basis-Backup und WAL-Archiven wieder her:

  1. Stoppen Sie PostgreSQL:
systemctl stop postgresql
  1. Löschen Sie das vorhandene Datenverzeichnis:
rm -rf /var/lib/postgresql/15/main/*
  1. Extrahieren Sie das Basis-Backup:
tar -xzf /backups/base_backup/base.tar.gz -C /var/lib/postgresql/15/main/
  1. Erstellen Sie eine recovery.conf (PostgreSQL 11 und früher) oder konfigurieren Sie postgresql.conf und erstellen Sie eine recovery.signal Datei (PostgreSQL 12+):
# For PostgreSQL 12+
touch /var/lib/postgresql/15/main/recovery.signal

Fügen Sie zu postgresql.conf hinzu:

restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'
recovery_target_time = '2025-01-15 14:30:00'
recovery_target_action = 'promote'
  1. Legen Sie die richtige Eigentümerschaft fest und starten Sie PostgreSQL:
chown -R postgres:postgres /var/lib/postgresql/15/main/
systemctl start postgresql

PostgreSQL wird WAL-Segmente bis zum angegebenen Zeitstempel wiedergeben und dann zu einem normalen Lese-Schreib-Zustand heraufstufen.

9. Automatisierung von Backups mit Cron

Manuelle Backups sind unzuverlässig. Die Automatisierung Ihres Backup-Zeitplans mit cron stellt Konsistenz sicher und eliminiert den menschlichen Fehlerfaktor.

Erstellen Sie ein Backup-Skript

nano /usr/local/bin/pg_backup.sh
#!/bin/bash

# PostgreSQL Automated Backup Script
BACKUP_DIR="/backups/postgresql"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DB_USER="postgres"
DB_NAME="my_production_db"
RETENTION_DAYS=14

# Create backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"

# Perform the backup
pg_dump -U "$DB_USER" -F c "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.dump"

# Remove backups older than retention period
find "$BACKUP_DIR" -name "*.dump" -mtime +"$RETENTION_DAYS" -delete

# Log completion
echo "[$TIMESTAMP] Backup of $DB_NAME completed successfully." >> /var/log/pg_backup.log

Machen Sie das Skript ausführbar:

chmod +x /usr/local/bin/pg_backup.sh

Mit Cron planen

crontab -e

Fügen Sie die folgende Zeile hinzu, um ein Backup jeden Abend um 2:00 Uhr auszuführen:

0 2 * * * /usr/local/bin/pg_backup.sh

Für wöchentliche vollständige Backups plus tägli

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen