Backup wiederherstellen
Stelle IBM-Bob-PostgreSQL-Datenbanken aus einem Backup wieder her, um Datenverlust zu beheben, Umgebungen zu migrieren oder zu einem bekannten fehlerfreien Zustand zurückzukehren.
Verwende dieses Verfahren, um IBM Bob und zugehörige PostgreSQL-Datenbanken aus Backup-Dateien wiederherzustellen. Der Wiederherstellungsprozess umfasst die Validierung der Backup-Integrität, die Vorbereitung der Umgebung, die Neuerstellung der Zieldatenbank, die Wiederherstellung des Backup-Inhalts und die Überprüfung der wiederhergestellten Daten, bevor die Anwendungsdienste wieder in Betrieb genommen werden.
Das Wiederherstellen einer Datenbank ersetzt den vorhandenen Datenbankinhalt durch Daten aus der ausgewählten Backup-Datei. Anwendungsdienste müssen vor dem Start gestoppt werden, da aktive Datenbankschreibvorgänge den Wiederherstellungsprozess beschädigen können. Teste Wiederherstellungsverfahren immer in einer Nicht-Produktionsumgebung, bevor du eine Produktions-Recovery durchführst.
Voraussetzungen
Überprüfe Folgendes, bevor du eine Datenbank wiederherstellst:
Backup-Integrität überprüfen
# Access backup PVC
oc run backup-verify -n <bob-instance-namespace> --image=busybox --rm -it --restart=Never \
--overrides='{
"spec": {
"containers": [{
"name": "backup-verify",
"image": "busybox",
"command": ["sh"],
"stdin": true,
"tty": true,
"volumeMounts": [{
"name": "backup",
"mountPath": "/backups"
}]
}],
"volumes": [{
"name": "backup",
"persistentVolumeClaim": {
"claimName": "bob-db-backup-pvc"
}
}]
}
}'
# Inside the pod:
cd /backups/bob-db
gunzip -t backup_bob_20260902_020000.sql.gz # Test gzip integrity
cat backup_bob_20260902_020000.sql.gz.meta # Check metadataBackup-Details bestätigen
- Backup-Zeitstempel stimmt mit dem erwarteten Wiederherstellungspunkt überein.
- Datenbankname ist korrekt.
- Backup-Größe ist plausibel.
- Metadatendatei ist vorhanden und lesbar.
Pre-Restore-Backup erstellen
Erstelle vor der Wiederherstellung ein Backup des aktuellen Datenbankzustands:
oc exec -n <bob-instance-namespace> bob-db-1 -- \
pg_dump -U postgres bob | gzip > pre-restore-backup-$(date +%Y%m%d_%H%M%S).sql.gzWiederherstellungsverfahren
Stoppe alle IBM-Bob-Anwendungsdienste, um Datenbankschreibvorgänge während der Wiederherstellung zu verhindern.
# Scale down Bob services
oc scale deployment bob-admin-service --replicas=0 -n <bob-instance-namespace>
oc scale deployment bob-api-service --replicas=0 -n <bob-instance-namespace>
oc scale deployment bob-ui-service --replicas=0 -n <bob-instance-namespace>
# Verify pods are terminated
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bobErstelle einen temporären Wiederherstellungs-Pod, der Zugriff sowohl auf die PostgreSQL-Datenbank als auch auf den Backup-Speicherort hat.
# Get PostgreSQL image
POSTGRES_IMAGE=$(oc get cluster bob-db -n <bob-instance-namespace> -o jsonpath='{.spec.imageName}')
# Create restore pod
oc run postgres-restore -n <bob-instance-namespace> --image=$POSTGRES_IMAGE --rm -it --restart=Never \
--overrides='{
"spec": {
"containers": [{
"name": "restore",
"image": "'$POSTGRES_IMAGE'",
"command": ["bash"],
"stdin": true,
"tty": true,
"env": [
{"name": "PGHOST", "value": "bob-db-rw"},
{"name": "PGPORT", "value": "5432"},
{"name": "PGUSER", "value": "postgres"},
{"name": "PGPASSWORD", "valueFrom": {"secretKeyRef": {"name": "bob-db-app", "key": "password"}}}
],
"volumeMounts": [{
"name": "backup",
"mountPath": "/backups"
}]
}],
"volumes": [{
"name": "backup",
"persistentVolumeClaim": {
"claimName": "bob-db-backup-pvc"
}
}]
}
}'Überprüfe im Wiederherstellungs-Pod die Backup-Datei und teste die Datenbankverbindung:
# List available backups
ls -lh /backups/bob-db/
# Verify backup file
BACKUP_FILE="/backups/bob-db/backup_bob_20260902_020000.sql.gz"
gunzip -t $BACKUP_FILE
echo "Backup file is valid"
# Check metadata
cat ${BACKUP_FILE}.meta
# Test database connection
psql -c "SELECT version();"Stelle für die meisten Recovery-Szenarien in eine leere Datenbank wieder her, um sicherzustellen, dass veraltete oder konfligierende Daten entfernt werden.
Dieser Schritt entfernt den aktuellen Datenbankinhalt dauerhaft.
psql -c "DROP DATABASE IF EXISTS bob;"
psql -c "CREATE DATABASE bob;"Stelle die Datenbank wieder her, indem du den Backup-Inhalt in PostgreSQL ladest:
# Extract and restore backup
gunzip -c $BACKUP_FILE | psql -d bob
# This may take several minutes depending on backup sizeÜberprüfe vor der Rückkehr der Anwendung in den Betrieb, ob die Wiederherstellung erfolgreich abgeschlossen wurde:
# Connect to restored database
psql -d bob
# Verify tables exist
\dt
# Check row counts for key tables
SELECT COUNT(*) FROM users;
SELECT COUNT(*) FROM projects;
SELECT COUNT(*) FROM conversations;
# Verify recent data
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
# Exit psql
\qStarte nach dem erfolgreichen Abschluss der Datenbankvalidierung IBM-Bob-Dienste neu und ermögliche ihnen, sich mit der wiederhergestellten Datenbank zu verbinden. Überwache die Anwendungs-Startup-Protokolle auf Fehler oder Migrationsfehler.
# Exit restore pod
exit
# Scale up Bob services
oc scale deployment bob-admin-service --replicas=1 -n <bob-instance-namespace>
oc scale deployment bob-api-service --replicas=3 -n <bob-instance-namespace>
oc scale deployment bob-ui-service --replicas=2 -n <bob-instance-namespace>
# Verify pods are running
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bob
# Check application logs
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/name=bob --tail=50Führe eine End-to-End-Anwendungsvalidierung durch, bevor Benutzer sich wieder verbinden dürfen:
# Test application endpoints
curl -k https://bob.example.com/health
# Verify user login works
# Verify data access works
# Verify key functionality worksEine erfolgreiche Validierung zeigt an, dass der Wiederherstellungsprozess abgeschlossen ist.
Best Practices
- Teste immer zuerst in einer Nicht-Produktionsumgebung.
- Erstelle vor dem Start ein Pre-Restore-Backup des aktuellen Datenbankzustands.
- Überprüfe die Backup-Integrität vor dem Start.
- Plane Ausfallzeiten ein und kommuniziere mit Benutzern.
- Dokumentiere den Wiederherstellungsprozess und die Ergebnisse.
- Überprüfe die Datenintegrität nach der Wiederherstellung.
- Überwache die Anwendung nach der Wiederherstellung engmaschig.
Häufige Wiederherstellungsprobleme
| Problem | Ursache | Lösung |
|---|---|---|
| Unzureichender Speicherplatz | Nicht genug Speicherplatz für den Wiederherstellungsvorgang | PVC erweitern oder Speicherplatz freigeben, bevor die Wiederherstellung gestartet wird. |
| Verbindungs-Timeout | Netzwerkkonnektivitätsprobleme oder Datenbankverfügbarkeitsprobleme | Datenbankverbindung überprüfen und Timeout-Werte bei Bedarf erhöhen. |
| Berechtigungsfehler | Der Wiederherstellungsbenutzer verfügt nicht über die erforderlichen Datenbankberechtigungen | Dem Wiederherstellungsbenutzer die erforderlichen Berechtigungen erteilen, bevor der Wiederherstellungsvorgang ausgeführt wird. |