Skip to content

Backup & Restore Runbook

Executive Overview — all summaries for decision-makers.

Übersicht

KomponenteBackup-MethodeFrequenz (Soll)Speicherort
PostgreSQLRender PITR (Pro Plan)KontinuierlichRender Frankfurt
PostgreSQLpg_dump Directory-FormatMonatlichCloudflare R2 (MQA)
R2 MediaR2 Versioning / ReplikationBei Migration aktivierenCloudflare
Render Uploads (/uploads)⚠️ EphemeralMigration zu R2 geplant

Automatisches Backup (Script)

bash
# Voraussetzung: DATABASE_URL (External URL mit sslmode=require)
export DATABASE_URL='postgresql://...'

./backend/scripts/backup-production-db.sh
# Output: ./backups/mqa_governance_YYYY-MM-DD_HHMM.dir.tar.gz

Upload des Archives nach R2 (manuell oder Cron):

bash
# Beispiel mit rclone (nach Konfiguration MQA-R2-Remote)
rclone copy backups/ mqa-r2:backups/postgres/

Restore (Production)

Vorsicht: Überschreibt bestehende DB-Objekte.

  1. Maintenance-Fenster ankündigen
  2. Render Backend skalieren pausieren oder Maintenance-Mode
  3. Restore ausführen → DATABASE-RESTORE
  4. Migrationen synchronisieren:
bash
cd backend
npx prisma migrate deploy
# Bei Konflikten (Schema bereits im Dump):
npx prisma migrate resolve --applied <migration_name>
  1. Smoke-Tests → DEPLOYMENT-CHECKLIST
  2. Backend redeployen

Render Postgres PITR

Im Render Dashboard → mqa-postgresBackups → Point-in-Time Recovery.

Nutzen bei versehentlichem DELETE, nicht bei Schema-Migration-Fehlern.

Restore-Test (vierteljährlich)

SchrittErwartung
Backup von R2 ladenArchiv intakt
In Staging-DB restorenKein Fehler
User-Count prüfen> 0
Login OAuth auf StagingFunktioniert
DokumentierenDatum + Verantwortlicher in OPS-ROADMAP

Notfall-Kontakte

RolleAktion
Lead DeveloperRestore ausführen, Deploy
MQA ITDNS, Azure, Cloudflare
Render SupportDB PITR, Platform-Ausfall

Änderungshistorie

DatumEreignis
2026-08-03Prod-DB aus Juni-2026-Dump restored; Runbook erstellt