Wie man automatisch eine PostgreSQL-Datenbank in Docker sichert
Im Zeitalter der Containerisierung ist die Sicherheit von Datenbanken für Betrieb und Wartung von höchster Bedeutung. Docker vereinfacht zwar die Bereitstellung von PostgreSQL, doch die Folgen einer Beschädigung des Containers oder eines versehentlichen Datenverlusts ohne automatische Backups können verheerend sein. Dieser Artikel stellt einige gängige Lösungen für die automatische Datensicherung von PostgreSQL in Docker-Umgebungen vor und analysiert deren Implementierungsmethoden sowie Vor- und Nachteile.
Wird gerendert...
## Vorgehensweise 1: Host-Script + Crontab-Zeitplan
Dies ist die klassischste und direkteste Methode. Durch das Erstellen von Shell-Skripten auf dem Host (Host) und die Verwendung von `docker exec` zum Aufrufen von `pg_dump`-Tools innerhalb des Containers.
### Implementierungsschritte:
1. **Skript erstellen**: Erstellen Sie eine `.sh`-Datei mit Inhalten, die normalerweise Folgendes enthalten:
```Bash
docker exec -t <container_name> pg_dumpall -c -U <username> > /path/to/backups/db_$(date +%Y%m%d).sql
```
2. **Berechtigungen einrichten**: Stellen Sie sicher, dass das Skript Ausführungsberechtigungen besitzt.
3. **Cron konfigurieren**: Verwenden Sie `crontab -e`, um einen Zeitplan hinzuzufügen (z. B. jeden Tag um 2 Uhr morgens).
4. **Bereinigungsmechanismus**: Fügen Sie im Skript den `find`-Befehl hinzu, um automatisch alte Backups nach X Tagen zu löschen.
### Vor- und Nachteile:
- **Vorteile**: Keine Änderung des Container-Images erforderlich, flexible Konfiguration, keine zusätzlichen Container-Ressourcen.
- **Nachteile**: Abhängig von der Host-Umgebung, wenn auf einen neuen Server migriert wird, müssen Cron und Skriptpfade neu konfiguriert werden.
## Vorgehensweise 2: Verwendung eines "Sidecar"-Containers
In Docker Compose wird ein spezieller Dienst für die Sicherung hinzugefügt. Derzeit gibt es viele fertige Bilder in der Community, wie z. B. `prodrigestivill/postgres-backup-local`.
### Implementierungsschritte:
1. **Compose-Datei ändern**: Fügen Sie in der `docker-compose.yml`-Datei den Sicherungsdienst hinzu:
```YAML
services:
db:
image: postgres:15
backup:
image: prodrigestivill/postgres-backup-local
volumes:
- ./backups:/backups
links:
- db
environment:
- POSTGRES_HOST=db
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- SCHEDULE=@daily # Verwendung des internen Cron-Ausdrucks
- BACKUP_KEEP_DAYS=7
```
2. **Dienst starten**: Nach `docker-compose up -d` wird der Sicherungsdienst automatisch gemäß dem festgelegten `SCHEDULE` ausgeführt.
### Vor- und Nachteile:
- **Vorteile**: Hohe Integration, Konfiguration gemeinsam mit dem Projektcode verwaltet; einfach zu migrieren, ein Satz von Compose kann überall ausgeführt werden und sichert die Daten.
- **Nachteile**: Erhöht den Overhead um einen Container, und die Sicherungsdateien werden standardmäßig im Volume gespeichert, es muss also weiterhin eine externe Sicherung berücksichtigt werden.
## Vorgehensweise 3: Cloud-/Objektspeicher-Sicherung (z. B. S3/OSS)
Wenn Ihre Daten sehr wichtig sind, empfehlen wir, die Sicherung direkt in die Cloud-Speicherung (z. B. AWS S3 oder Alibaba Cloud OSS) zu übertragen, um physische Serverfehler zu vermeiden.
### Implementierungsschritte:
1. **Bild auswählen**: Verwenden Sie ein Bild, das das S3-Protokoll unterstützt (z. B. `schickling/postgres-backup-s3`).
2. **Umgebungsvariablen konfigurieren**: Konfigurieren Sie im Container `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY` und `S3_BUCKET`.
3. **Sicherung ausführen**: Der Container führt automatisch den gesamten Prozess "Exportieren -> Komprimieren -> Hochladen" durch.
### Vor- und Nachteile:
- **Vorteile**: **Externes Backup**, sehr hohe Sicherheit; belegt keinen lokalen Festplattenspeicher.
- **Nachteile**: Benötigt öffentliche Internetbandbreite und verursacht geringe Cloud-Speicherkosten.
## Vorgehensweisen im Vergleich
| **Eigenschaft** | **Vorgehensweise 1: Host-Skript** | **Vorgehensweise 2: Sidecar-Container** | **Vorgehensweise 3: Cloud-Speicher-Sicherung** |
| ------------ | ---------------------- | ------------------------ | ---------------------- |
| **Bereitstellungs-schwierigkeit** | Mittel (Cron-Konfiguration erforderlich) | **Einfach (YAML-Konfiguration)** | Relativ komplex (Cloud-Zugriff erforderlich) |
| **Portabilität** | Gering | **Sehr gut** | Gut |
| **Sicherheit** | Abhängig von lokaler Festplatte | Abhängig von lokaler Festplatte | **Sehr hoch (externes Redundanzsystem)** |
| **Anwendungsszenario** | Kleine Einzelmaschinenprojekte | Komplexe Anwendungen, Microservices | Produktionsumgebung, Kerngeschäft |
## Empfehlungen
- **Nicht nur sichern, sondern auch testen**: Versuchen Sie regelmäßig, von den Sicherungsdateien aus Daten wiederherzustellen, um sicherzustellen, dass die Sicherung "lebendig" ist.
- **Verarbeitung von vertraulichen Informationen**: Vermeiden Sie es, Passwörter im Klartext in Skripten oder Compose-Dateien zu schreiben, verwenden Sie stattdessen Docker-Geheimnisse oder `.pgpass`-Dateien.
- **Überwachung und Alarm**: Unabhängig von der verwendeten Methode ist es ratsam, eine Benachrichtigung bei Sicherungsfehlern zu konfigurieren (z. B. Enterprise-WeChat/DingTalk-Hook), um zu verhindern, dass die Sicherung stillschweigend fehlschlägt.Kommentar
Melde dich an, um Kommentare anzuzeigen und zu veröffentlichen
Zur Anmeldung