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.

Warnung:

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 metadata

Backup-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.gz

Wiederherstellungsverfahren

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=bob

Erstelle 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.

Warnung:

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
\q

Starte 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=50

Fü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 works

Eine 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

ProblemUrsacheLösung
Unzureichender SpeicherplatzNicht genug Speicherplatz für den WiederherstellungsvorgangPVC erweitern oder Speicherplatz freigeben, bevor die Wiederherstellung gestartet wird.
Verbindungs-TimeoutNetzwerkkonnektivitätsprobleme oder DatenbankverfügbarkeitsproblemeDatenbankverbindung überprüfen und Timeout-Werte bei Bedarf erhöhen.
BerechtigungsfehlerDer Wiederherstellungsbenutzer verfügt nicht über die erforderlichen DatenbankberechtigungenDem Wiederherstellungsbenutzer die erforderlichen Berechtigungen erteilen, bevor der Wiederherstellungsvorgang ausgeführt wird.
Wie ist dieses Thema?