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
- PostgreSQL-Backup-Optionen verstehen
- Voraussetzungen und Berechtigungsanforderungen
- Methode 1 — SQL Dump mit
pg_dump - Methode 2 — Sicherung aller Datenbanken mit
pg_dumpall - Methode 3 — Custom Format Backups für große Datenbanken
- Wiederherstellung aus SQL Dumps
- Wiederherstellung aus Custom Format Dumps
- Methode 4 — Continuous Archiving und Point-in-Time Recovery (PITR)
- Automatisierung von Backups mit Cron
- Sicherung und Offsite-Speicherung von Backups
- 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.
| Methode | Am besten für | Vorteile | Nachteile |
|---|---|---|---|
SQL Dump (pg_dump) | Kleine bis mittlere Datenbanken | Einfach, portabel, menschenlesbar | Langsam für sehr große DBs |
| Custom Format Dump | Mittlere bis große Datenbanken | Komprimiert, parallele Wiederherstellung | Binär, erfordert pg_restore |
| Dateisystem-Snapshot | Sehr große Datenbanken | Schnell, konsistent | Erfordert Fachwissen, DB muss stillgelegt oder Snapshot-fähig sein |
| PITR (WAL Archiving) | Geschäftskritische Produktionssysteme | Granulare Point-in-Time-Wiederherstellung | Komplexes 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_dumpallsind 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-ipWenn 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-ipSchritt 2: Führen Sie den pg_dump Befehl aus
pg_dump -U username -W -F p database_name > /backups/backup_file.sqlParameteraufschlüsselung:
| Parameter | Beschreibung |
|---|---|
-U username | Der PostgreSQL-Benutzer, der das Backup durchführt |
-W | Passwort interaktiv abfragen |
-F p | Ausgabeformat: p = einfacher SQL-Text |
database_name | Der Name der zu sichernden Datenbank |
> /backups/backup_file.sql | Ausgabe 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_*.sqlDie 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).sqlDieser 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.gz5. 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
-jFlag - 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).dumpErstellen 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| Parameter | Beschreibung |
|---|---|
-F d | Directory Format — eine Datei pro Tabelle |
-j 4 | Verwenden Sie 4 parallele Worker-Prozesse |
-f /path/to/dir | Ausgabeverzeichnis (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.sqlParameteraufschlüsselung:
| Parameter | Beschreibung |
|---|---|
-U postgres | PostgreSQL Superuser |
-d my_restored_db | Zieldatenbank für Wiederherstellung |
-f /path/to/file.sql | Pfad 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_db7. 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.dumpWiederherstellung 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.dumpParallele 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.dumpDiese 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.confFü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:
| Parameter | Wert | Beschreibung |
|---|---|---|
wal_level | replica | Aktiviert ausreichende WAL-Details für Archivierung |
archive_mode | on | Aktiviert 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_archiveStarten Sie PostgreSQL neu, um Änderungen anzuwenden:
systemctl restart postgresqlSchritt 2: Erstellen Sie ein Basis-Backup mit pg_basebackup
pg_basebackup -U postgres -D /backups/base_backup -Ft -z -P -Xs| Parameter | Beschreibung |
|---|---|
-D /backups/base_backup | Zielverzeichnis für das Basis-Backup |
-Ft | Tar Format Ausgabe |
-z | Mit gzip komprimieren |
-P | Fortschritt anzeigen |
-Xs | WAL während des Backups streamen |
Schritt 3: Wiederherstellung zu einem bestimmten Zeitpunkt
So stellen Sie aus einem Basis-Backup und WAL-Archiven wieder her:
- Stoppen Sie PostgreSQL:
systemctl stop postgresql- Löschen Sie das vorhandene Datenverzeichnis:
rm -rf /var/lib/postgresql/15/main/*- Extrahieren Sie das Basis-Backup:
tar -xzf /backups/base_backup/base.tar.gz -C /var/lib/postgresql/15/main/- Erstellen Sie eine
recovery.conf(PostgreSQL 11 und früher) oder konfigurieren Siepostgresql.confund erstellen Sie einerecovery.signalDatei (PostgreSQL 12+):
# For PostgreSQL 12+
touch /var/lib/postgresql/15/main/recovery.signalFü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'- Legen Sie die richtige Eigentümerschaft fest und starten Sie PostgreSQL:
chown -R postgres:postgres /var/lib/postgresql/15/main/
systemctl start postgresqlPostgreSQL 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.logMachen Sie das Skript ausführbar:
chmod +x /usr/local/bin/pg_backup.shMit Cron planen
crontab -eFügen Sie die folgende Zeile hinzu, um ein Backup jeden Abend um 2:00 Uhr auszuführen:
0 2 * * * /usr/local/bin/pg_backup.shFür wöchentliche vollständige Backups plus tägli
