Die Wiederherstellung im Desaster-Fall ist keine einzelne Maßnahme, sondern eine Kette aus Entscheidungen, Abhängigkeiten und sauber geübten Handgriffen. In der Praxis scheitern Wiederanläufe selten daran, dass „kein Backup existiert“. Häufiger sind Runbooks unvollständig, Zuständigkeiten unklar, Failover-Wege nie real getestet oder die Kommunikation sorgt für unnötigen Druck und falsche Prioritäten.
Dieser Beitrag richtet sich an Administratoren, System Engineers, Operatoren und technische IT-Dienstleister. Der Fokus liegt auf einem praxistauglichen Vorgehen: Wie Sie Runbooks so schreiben, dass sie im Stress funktionieren, wie Sie Failover-Tests planen, ohne Produktion zu gefährden, und wie Sie Kommunikation und Entscheidungswege so aufstellen, dass technische Teams handlungsfähig bleiben. Beispiele orientieren sich an typischen MariaDB-Setups (Replikation, Backups, Point-in-Time-Recovery), beziehen aber bewusst auch Infrastrukturthemen wie DNS, Load Balancer, Identitäten und Monitoring ein.
Wiederherstellung im Desaster-Fall in der Praxis
Ein „Desaster“ ist operativ weniger ein einzelnes Ereignis als ein Zustand: ein Service ist nicht nutzbar, die Ursache ist nicht sofort klar, und die normale Änderungs- und Freigabekette ist zu langsam. Typische Auslöser sind Ransomware (inklusive kompromittierter Admin-Konten), Storage-Ausfall, Fehler bei Updates, Cloud-/Provider-Störung, Netzwerksegment-Probleme oder logische Datenkorruption (z. B. fehlerhafte Anwendung schreibt falsche Daten).
Runbooks scheitern häufig aus denselben Gründen:
- Falsche Annahmen: „Der Monitoring-Host läuft“, „DNS ist verfügbar“, „wir haben Internet“, „die Backups sind lesbar“.
- Zu grobe Schritte: „Restore DB“ ohne Angaben zu Version, Recovery-Mode, Validierung, Abhängigkeiten und Rückfallpunkt.
- Keine Entscheidungspunkte: Runbooks brauchen klare „Wenn-dann“-Weichen (z. B. Datenkorruption vs. Infrastruktur-Ausfall).
- Keine geübte Kommunikation: Technik wird mit Statusfragen überrollt, während Entscheidungen (z. B. Datenverlust akzeptieren?) nicht getroffen werden.
Das Gegenmittel ist eine Kombination aus (1) gut strukturierten Runbooks, (2) realistischen Tests, (3) klarer Rollenverteilung und (4) Kommunikationsregeln, die den technischen Wiederanlauf stützen statt zu blockieren.
RTO und RPO: Ziele definieren, bevor Sie ein Runbook schreiben
Ohne Zielwerte wird jedes Runbook entweder zu konservativ (zu langsam) oder zu riskant (zu viel Datenverlust). Zwei Begriffe sind zentral:
- RTO (Recovery Time Objective): Zielzeit bis der Service wieder nutzbar ist. Praktisch heißt das: wann können Nutzer wieder arbeiten, nicht wann ist „alles perfekt“.
- RPO (Recovery Point Objective): maximal tolerierbarer Datenverlust gemessen in Zeit. Praktisch: „wir dürfen im Worst Case nur bis 15 Minuten zurück“.
Für MariaDB bedeutet das oft: RTO wird durch Restore-Dauer, DNS/Load-Balancer-Umschaltung, Applikations-Cache-Invalidierung und Schema-Kompatibilität begrenzt. RPO hängt von Replikationsverzögerung, Backup-Intervallen und Point-in-Time-Recovery (PITR, Wiederherstellung bis zu einem Zeitpunkt anhand binärer Logs) ab.
Wichtig: Halten Sie RTO/RPO pro Service fest, nicht „für die Datenbank“. Eine Datenbank kann technisch laufen, während die Business-Software wegen fehlender Secrets, falscher Endpunkte oder kaputter Jobs weiterhin ausfällt.
Runbook-Design: Aufbau, Rollen und „Stop-the-Line“-Regeln
Ein Runbook ist ein Betriebshandbuch für die Störungslage. Es muss in 2–3 Minuten erfassbar sein und trotzdem tief genug, um Entscheidungen und Schritte belastbar zu machen. Bewährt hat sich folgende Struktur:
1) Header: Zweck, Scope, Voraussetzungen
- Zweck: „Wiederanlauf MariaDB-Service X nach Totalausfall primäres Rechenzentrum“.
- Scope: Welche Systeme sind enthalten (DB, Proxy/Load Balancer, DNS, Monitoring, Backup-Storage, Secrets)?
- Voraussetzungen: Zugänge (Break-Glass-Konten), Offline-Kopien, Schlüssel/Passwörter, Notfall-Netz.
2) Rollenmodell: Wer entscheidet, wer führt aus
Im Desaster-Fall ist Parallelität entscheidend. Definieren Sie mindestens:
- Incident Lead: koordiniert, priorisiert, schützt das Team vor Kontextwechseln.
- DB Operator: führt MariaDB-Schritte aus, dokumentiert Zeiten und Befunde.
- Infra Operator: DNS, Load Balancer, Storage, Netzwerk, VM/Container, Zugriffspfade.
- Kommunikation: Statusupdates, Stakeholder, ggf. Provider-Tickets.
„Stop-the-Line“-Regeln gehören explizit ins Runbook: In welchen Situationen wird sofort angehalten (z. B. Verdacht auf laufende Ransomware, unklare Datenintegrität, unerklärliche Binlog-Lücken)? Das verhindert hektisches „Wiederhochfahren“ in eine noch kompromittierte Umgebung.
3) Entscheidungsbaum: Failover oder Restore?
Runbooks sollten nicht nur Schritte listen, sondern Pfade. Kernfrage: Failover (Umschalten auf vorhandene Standby-Umgebung) oder Restore (Wiederherstellen aus Backups). Failover ist meist schneller (RTO), Restore kann sauberer sein (Sicherheit/Integrität) – besonders nach Ransomware oder logischer Korruption.
Technische Grundlagen für MariaDB-DR: Replikation, Backups, PITR
Für MariaDB im Unternehmensbetrieb sind drei Bausteine typisch:
- Replikation: Sekundärsystem(e) erhalten Änderungen von der Primär-DB. Je nach Setup asynchron oder semi-synchron. Risiko: Replikation transportiert auch „schlechte“ Änderungen (Korruption, Löschungen).
- Physische/logische Backups: physisch (Dateiebene, z. B. Percona XtraBackup kompatible Verfahren) ist meist schneller beim Restore; logisch (mysqldump) ist portabler, aber bei großen Datenmengen langsam.
- PITR (Point-in-Time-Recovery): Wiederherstellung auf einen Zeitpunkt zwischen Backup und „jetzt“ mittels Binlogs (binäre Änderungsprotokolle). Voraussetzung: Binlogs sind vollständig, zeitlich zuordenbar und verfügbar.
Ein DR-Runbook muss konkret festhalten, welche Kombination Sie nutzen: „Failover auf Replica A“ ist etwas anderes als „Restore letztes Vollbackup + Binlogs bis T-15min“. Und: Für MariaDB ist die Integritätsprüfung (z. B. Tabellen prüfen, Applikations-Sanity-Checks) nach Wiederanlauf häufig der Engpass, nicht das Kopieren der Daten.
Vorbereitung: Was vor dem Desaster dokumentiert und bereitgestellt sein muss
Viele Desaster laufen operativ schief, weil „Kleinteile“ fehlen. Diese Checkliste ist bewusst pragmatisch und aus Betriebssicht geschrieben:
Identitäten und Zugänge (Break Glass)
„Break Glass“ meint Notfallzugänge, die getrennt von normalen Admin-Konten verwaltet und besonders geschützt werden (z. B. offline verwahrte MFA-Token, versiegelte Zugangsdaten, getrennte Passwort-Policies). Für DR wichtig:
- Notfall-SSH/RDP-Zugang in ein isoliertes Admin-Netz
- DB-Admin-Zugang, der nicht von SSO/IdP abhängt (IdP = Identity Provider, zentrale Anmeldung)
- Zugriff auf Backup-Repository und Schlüsselmaterial (Verschlüsselung, Object-Storage-Keys)
Konfigurations- und Abhängigkeitsinventar
Mindestens: Versionen (MariaDB, OS, Proxy), Parameter (innodb_flush_log_at_trx_commit, binlog_format), Topologie (Primär/Replica, GTID ja/nein), DNS-Namen, Ports, Firewall-Regeln, Storage-Klassen, Monitoring-Checks, Cronjobs/Batch-Jobs. Ohne das wird jeder Wiederanlauf zum improvisierten Rebuild.
Offline- und „No-Internet“-Pfad
Planen Sie den Fall, dass weder Internet noch Cloud-Konsole erreichbar sind. Das klingt extrem, ist aber bei Provider-Störungen, BGP-Problemen oder Security-Incidents realistisch. Praktische Maßnahmen:
- Offline-Kopie der Runbooks (PDF/Print) und der wichtigsten Secrets (gesichert)
- Lokales Repo/Cache für Pakete oder Container-Images (sonst scheitert Rebuild am Download)
- Out-of-Band-Zugriff (z. B. iLO/iDRAC/IPMI oder serieller Konsolenzugang) in separatem Netz
Failover-Tests: Arten, Risiken und Erfolgskriterien
Failover-Tests sind kein „Event“, sondern ein wiederholbarer Prozess. Entscheidend ist, dass Sie Erfolgskriterien definieren, die über „Ping geht“ hinausgehen. Für MariaDB und abhängige Services sollten Tests mindestens abdecken: Schreib-/Lesezugriff, Transaktionskonsistenz, Applikations-Login, kritische Jobs/Queues, Reporting, sowie Monitoring/Alerting.
Testtypen (von sicher bis realistisch)
- Tabletop/Walkthrough: Team geht Runbook durch, ohne Systeme zu ändern. Gut für Rollen und Kommunikation, schwach für Technikdetails.
- Simulierter Failover im Test/Staging: Technisch wertvoll, aber oft andere Datenmengen/Lastprofile.
- Geplanter Failover in Produktion: hoher Erkenntnisgewinn, aber muss sauber vorbereitet sein (Wartungsfenster, Rollback, Stakeholder).
- Ungeplanter Failover-Drill: „Chaos“-Ansatz mit Überraschungselementen. Nur für reife Teams und stabile Automatisierung.
Typische Stolperfallen bei MariaDB-Failover
- Replica lag: Replikationsverzögerung führt zu größerem RPO als erwartet. Ursache oft I/O-Engpässe oder große Transaktionen.
- Read/Write-Splitting: Anwendungen oder Proxys (z. B. ProxySQL) nutzen unterschiedliche Endpunkte; nach Failover schreiben sie weiter auf „read-only“ oder in die falsche Richtung.
- DNS-TTL: Zu lange TTL (Time To Live, Cache-Dauer) verzögert Umschaltung. Zu kurze TTL erhöht Last und Fehleranfälligkeit.
- GTID/Position-Drift: Wenn Topologie und Replikationsposition nicht sauber dokumentiert sind, drohen Split-Brain (zwei Primärsysteme).
- Security-Regression: Notfalländerungen umgehen Härtung (Firewall „kurz auf“, unsaubere Nutzerrechte).
Minimaler Failover-Test (praxisnah, in 60–120 Minuten)
Wenn Sie nur begrenzte Wartungsfenster haben, priorisieren Sie einen Test, der maximale Aussagekraft liefert:
- Freeze von Änderungen: Deployments stoppen, Batch-Jobs pausieren, Schreiblast reduzieren.
- Replica-Status prüfen: Replikation „catch up“, Lag dokumentieren.
- Umschalten: Applikations-Endpunkt auf Replica, Primär auf read-only bzw. isolieren.
- Sanity-Checks: Login, Lese-/Schreibtest, wichtigste Reports/Jobs.
- Rollback: zurückschalten oder neuen Primär belassen, aber klar entscheiden.
- Nacharbeiten: Tickets für gefundene Lücken, Runbook aktualisieren, Zeiten festhalten.
Restore-Runbook für MariaDB: Schrittfolge, Prüfungen, Rückfallstrategie
Restore ist der „harte“ Weg, weil er mehr Unbekannte enthält: Backup-Konsistenz, Schlüssel, Performance beim Rücksichern, und vor allem Validierung. Ein gutes Restore-Runbook trennt strikt: Wiederherstellen (Daten zurückbringen) und Wiederinbetriebnahme (Service nutzbar machen).
Phase 1: Lage klären und Zielzustand festlegen
- Incident-Klasse: Infrastrukturdefekt, Datenkorruption, Security Incident (z. B. Ransomware)?
- Zielpunkt: „Letztes konsistentes Backup“ oder PITR bis Zeitpunkt T?
- Risikoentscheidung: RPO-Tradeoff (Datenverlust) vs. RTO (Zeit). Diese Entscheidung muss bewusst getroffen und dokumentiert werden.
Gerade bei logischer Korruption ist Failover auf Replica gefährlich, weil die falschen Änderungen repliziert wurden. Dann ist Restore/PITR meist der sichere Pfad.
Phase 2: Infrastruktur bereitstellen (ohne Abkürzungen)
Wiederherstellen scheitert häufig an scheinbar einfachen Dingen: falsche Paketstände, fehlende Kernel-Parameter, andere Filesystem-Optionen, zu kleine Volumes, oder inkompatible InnoDB-Einstellungen. Halten Sie im Runbook fest:
- Zielform: VM, Bare Metal, Container (und welche Storage-Klasse)
- Kapazität: Daten + Overhead für Restore (temporär oft deutlich mehr)
- Netz: Segment, Firewall, nur notwendige Ports offen
- Zeitsynchronisation: NTP/Chrony (wichtig für Logs, Binlog-Zeitbezug, Audits)
Phase 3: Backup auffinden, verifizieren, restorefähig machen
Verifikation ist Pflicht. „Backup vorhanden“ ist kein Beweis für „Backup lesbar“. Prüfen Sie mindestens: Existenz, Größe/Trend, Prüfsummen, Verschlüsselungs-Keys, Zugriffsrechte und ob das Backup konsistent erstellt wurde.
Beispiel: Ein einfacher, repo-unabhängiger Prüfschritt für Archivdateien (Integrität und Entpackbarkeit) kann so aussehen:
#!/usr/bin/env bash
set -euo pipefail
BACKUP_TAR="/mnt/backup/mariadb-full-2026-07-28.tar.gz"
SHA_FILE="${BACKUP_TAR}.sha256"
# 1) Prüfsumme verifizieren
sha256sum -c "$SHA_FILE"
# 2) Archiv testweise lesen (ohne zu extrahieren)
tar -tzf "$BACKUP_TAR" > /dev/null
echo "Backup-Archiv ist lesbar und Prüfsumme passt."
Warum das wirkt: Prüfsummen decken stille Bitfehler ab; das Testlisten des Tar-Archivs deckt defekte Kompression/Containerstrukturen ab. Wann es scheitert: Wenn das Backup zwar als Datei intakt ist, aber inhaltlich inkonsistent (z. B. kein sauberer Snapshot, fehlende Tabellenpaces, unvollständige Binlogs). Deshalb braucht es zusätzlich DB-nahe Validierung (siehe unten).
Phase 4: Restore durchführen (physisch/logisch) und anschließend validieren
Die konkrete Restore-Methode hängt von Ihrem Backupverfahren ab. Wichtig für das Runbook sind universelle Kontrollpunkte:
- DB im kontrollierten Zustand starten: keine Applikation drauflassen, erst wenn Validierung bestanden ist.
- Read-only-Phase: zuerst nur lesen/prüfen, dann Freigabe für Schreiblast.
- Schema-/Migration-Checks: Passt das Schema zur Applikationsversion? Sonst drohen Folgefehler.
Ein praktischer SQL-Block für schnelle Plausibilitätsprüfungen (ohne tief in Engine-Interna abzutauchen):
-- Verbindung und Grundzustand
SELECT VERSION() AS mariadb_version;
SHOW VARIABLES LIKE 'read_only';
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
-- Replikations-/Binlog-Relevanz (falls genutzt)
SHOW VARIABLES LIKE 'log_bin';
SHOW BINARY LOGS;
-- Grobe Konsistenzsignale: Tabellenstatus und Fehler
SHOW DATABASES;
-- Für ausgewählte Kern-Tabellen (Beispielnamen anpassen):
CHECK TABLE app.core_customer;
CHECK TABLE app.core_order;
Warum das hilft: Sie prüfen, ob Sie auf der erwarteten Version sind, ob der Server versehentlich schreibbar ist, ob Binlogs vorhanden sind (relevant für PITR und spätere Replikation) und ob zentrale Tabellen zumindest oberflächlich konsistent wirken. Wo die Grenze liegt: CHECK TABLE ist kein Allheilmittel, und InnoDB kann manche Probleme erst unter Last zeigen. Ergänzen Sie daher Applikations-Sanity-Checks (Login, Kernprozess, kritische Reports).
Phase 5: PITR (Point-in-Time-Recovery) sauber durchführen
PITR bedeutet: Sie stellen ein Vollbackup wieder her und spielen danach Binlogs bis zu einem definierten Zeitpunkt ein. Damit das funktioniert, müssen Binlogs vollständig und zeitlich eindeutig sein. Typische Fallstricke:
- Zeitzonen/Clock Drift: Zeitversatz erschwert „Stop-Date-Time“-Entscheidung.
- Binlog-Lücken: fehlende Dateien durch Retention, Storage-Fehler oder falsches Offloading.
- Unscharfer Zielzeitpunkt: Business sagt „vor dem Fehler“, aber der Fehlerzeitpunkt ist nicht sauber korreliert (Logs!).
Im Runbook sollten Sie daher vorsehen: (1) Zeitlinie aus Monitoring/Applikationslogs, (2) klare Definition „letzter guter Commit“, (3) dokumentierte Kommandosequenz passend zu Ihrem Tooling. Wenn Sie mysqlbinlog einsetzen, testen Sie den Ablauf regelmäßig in einer isolierten Umgebung, weil kleine Parameterfehler (z. B. falsche GTID-Interpretation) sonst erst im Ernstfall auffallen.
Phase 6: Rückfallstrategie (Rollback) für den Restore selbst
Ein Restore kann scheitern: Backup doch korrupt, falscher Schlüssel, Restore dauert länger als RTO, oder Validierung schlägt fehl. Planen Sie daher den Rückfall nicht als „wir probieren weiter“, sondern als definierte Option:
- Plan B Failover: Wenn Restore zu lange dauert, Umschalten auf eine Replica mit akzeptiertem Datenverlust.
- Plan C Minimalbetrieb: Read-only-Modus für Kernfunktionen (z. B. Reporting) mit klarer Kommunikation.
- Forensik-Pfad: Bei Security Incident: Systeme isolieren, keine „Aufräumaktionen“ ohne Freigabe.
Kommunikation im Desaster-Fall: Takt, Inhalte, Entscheidungslog
Kommunikation ist im Notfall ein technischer Faktor, weil sie Fokus und Durchsatz bestimmt. Ein bewährtes Muster ist ein fester Update-Takt (z. B. alle 15–30 Minuten) und ein einheitliches Statusformat. Das reduziert Rückfragen und verhindert widersprüchliche Aussagen.
Status-Template (kurz, aber belastbar)
- Was ist betroffen? Service/Scope, Nutzerwirkung.
- Was ist bekannt? Ursache als Hypothese, nicht als Behauptung.
- Was tun wir gerade? Konkreter Schritt (Failover in Arbeit, Restore läuft, Validierung).
- Was ist das Risiko? Datenverlustfenster (RPO), Integritätsrisiko, Security-Risiko.
- Wann nächstes Update? Fixer Zeitpunkt.
Führen Sie parallel ein Entscheidungslog: Wer hat wann entschieden, welchen RPO/RTO-Tradeoff zu akzeptieren? Das ist nicht Bürokratie, sondern schützt das Team im Nachgang und hilft bei Audits.
Kommunikations-Stolperfallen
- Technik wird zum „Live-Ticker“: Ein Operator sollte nicht gleichzeitig restore und Stakeholder bedienen.
- Falsche Genauigkeit: „In 12 Minuten wieder online“ ist meist unseriös. Besser: „Restore läuft, nächster Meilenstein: Validierung in ca. 30–45 Minuten, dann ETA“.
- Kein klares „Go“: Wer gibt frei, dass wieder geschrieben werden darf? Das ist ein definierter Entscheidungspunkt.
Prüfschritte und Troubleshooting: Wenn Failover/Restore nicht wie geplant läuft
In realen Wiederanläufen sind es oft wenige, wiederkehrende Fehlerklassen. Ein gutes Runbook enthält deshalb kurze Troubleshooting-Blöcke mit „Symptom → Check → Maßnahme“.
Symptom: Anwendung verbindet sich nicht zur DB nach Failover
- Check: DNS zeigt noch auf alten Endpunkt? TTL/Cache? Load Balancer Health Checks?
- Check: Firewall-Regeln im DR-Segment? Security Groups? NAT?
- Maßnahme: Verifikation von Name → IP, Portreachability, dann Applikations-Config/Secrets prüfen.
Ein schneller Netzcheck von einem App-Host (Beispiel) kann so aussehen:
#!/usr/bin/env bash
set -euo pipefail
DB_FQDN="db.service.example"
DB_PORT="3306"
echo "DNS-Auflösung:";
getent hosts "$DB_FQDN" || true
echo "Port-Test:";
( echo > /dev/tcp/$DB_FQDN/$DB_PORT ) && echo "Port offen" || echo "Port blockiert/timeout"
Warum das hilft: Es trennt Namensauflösung von Port-Erreichbarkeit. Wo es scheitert: /dev/tcp ist bash-spezifisch und nicht überall verfügbar; in solchen Umgebungen brauchen Sie nc/telnet oder passende Tools.
Symptom: Replica ist nach Failover read-only oder verhält sich inkonsistent
- Check: read_only/super_read_only gesetzt? (Bei manchen HA-Setups bewusst.)
- Check: Replikationskonfiguration noch aktiv und schreibt weiter „von hinten“?
- Maßnahme: Klare Primär-Rolle herstellen, andere Knoten read-only und/oder replizierend neu anbinden.
Symptom: Restore dauert „endlos“
- Check: Storage-Performance (IOPS/Throughput), CPU-Engpässe, Kompression/Entschlüsselung
- Check: Zielvolume zu klein oder falsches Filesystem (z. B. noatime, journaling-Optionen)
- Maßnahme: Parallelisierung nur dort, wo Tooling und Storage es vertragen; ansonsten Plan B aktivieren.
Runbook-Qualität messbar machen: „Definition of Done“ für DR
Runbooks werden sonst zu Dokumenten, die niemand anfassen will. Definieren Sie objektive Qualitätskriterien:
- Ausführbar in der Realität: Alle Zugänge, Pfade, Abhängigkeiten sind vorhanden (inkl. Offline).
- Getestet: Jede kritische Runbook-Variante (Failover, Restore, PITR) ist mindestens einmal geübt.
- Zeitstempel: Letzter Test, letzte Änderung, verantwortliche Rolle.
- Validierung: Klare Abnahmekriterien, wann „Service wiederhergestellt“ gilt.
- Rückfall: Für jeden großen Schritt existiert eine Rückroll-Option.
Für MariaDB empfiehlt sich zusätzlich ein fester Rhythmus: kleine Restore-Proben (z. B. monatlich) mit Minimaldaten und eine größere End-to-End-Übung (z. B. quartalsweise oder halbjährlich) abhängig von Änderungsrate und Risiko.
Praxisfazit: Desaster-Recovery ist ein geübter Betriebsvorgang
Im Desaster-Fall gewinnen Teams, die Entscheidungen vorab getroffen haben: RTO/RPO je Service, klare Failover- vs. Restore-Pfade, abgesicherte Zugänge, und ein Kommunikationsschema, das Technik schützt. Ein Runbook ist dann nicht „Dokumentation“, sondern ein Werkzeug: es macht Schritte reproduzierbar, reduziert Fehler unter Stress und ermöglicht, aus jedem Test konkrete Verbesserungen abzuleiten.
Wenn Sie nur einen Punkt mitnehmen: Planen Sie Wiederherstellung nicht als „Backup-Thema“, sondern als End-to-End-Wiederanlauf inklusive DNS, Identitäten, Secrets, Jobs, Monitoring und Freigabeprozessen. Erst wenn Failover-Tests und Restore-Proben regelmäßig gelingen, ist die Wiederherstellung im Desaster-Fall mehr als Hoffnung.
Für dieses Thema sind auch Disaster Recovery Runbook und Incident-Kommunikation wichtig. Der Beitrag ordnet diese Aspekte verständlich ein und zeigt, worauf es im Alltag ankommt.