Backup-Verschlüsselung mit XtraBackup praktisch umsetzen
AI generated
InnoDB
SQL
MySQL / Backup
Backup-Verschlüsselung mit XtraBackup praktisch umsetzen
von der Schlüsselerzeugung bis zur Wiederherstellung

Ein unverschlüsseltes Datenbank-Backup, das in einem externen Speicher oder bei einem Cloud-Anbieter landet, ist ein vollständiger Abzug aller Kundendaten, sobald ein Angreifer Zugriff auf diesen Speicher erlangt. Dieser Artikel zeigt, wie Percona XtraBackup mit den --encrypt-Optionen verschlüsselte Backups erzeugt, wie Schlüssel sicher verwaltet werden, wie der Wiederherstellungs-Workflow mit Entschlüsselung abläuft und wie sich eine Aufbewahrungsstrategie für mehrere Backup-Generationen mit unterschiedlichen Schlüsseln aufbauen lässt.

16 Min. Lesezeit XtraBackup Backup-Verschlüsselung

1. Warum unverschlüsselte Backups ein eigenständiges Risiko sind

Viele Magento-Betreiber investieren erheblichen Aufwand in die Absicherung der laufenden Datenbank, etwa über TLS-Verschlüsselung der Verbindungen und strikte Benutzerrechte, während das nächtliche Backup als reine Kopie sämtlicher Daten unverschlüsselt auf einem Offsite-Speicher oder bei einem Cloud-Storage-Anbieter landet. Ein Backup ist funktional identisch mit der Datenbank selbst, enthält also dieselben Kundendaten, Adressen und je nach Konfiguration auch Zahlungsreferenzen, oft sogar über einen längeren historischen Zeitraum als die aktuelle Produktionsdatenbank.

Gerade Cloud-Storage-Buckets sind ein beliebtes Ziel für automatisierte Scans nach falsch konfigurierten Zugriffsrechten, und selbst bei korrekter Konfiguration bleibt das Risiko eines kompromittierten Zugriffsschlüssels für den Storage-Dienst bestehen. Eine konsequente Verschlüsselung der Backup-Datei selbst sorgt dafür, dass ein reiner Lesezugriff auf den Speicherort allein nicht ausreicht, um an verwertbare Daten zu gelangen.

2. XtraBackup-Grundlagen kurz: Fokus dieses Artikels auf Verschlüsselung

Die grundsätzliche Funktionsweise von Percona XtraBackup als Werkzeug für konsistente Hot-Backups von InnoDB-Tabellen, einschließlich der Zwei-Phasen-Logik aus Backup und anschließendem Prepare-Schritt, wird in einem separaten Artikel dieser Reihe im Detail behandelt, der XtraBackup gegen mysqldump abgrenzt. Dieser Artikel setzt ein grundlegendes Verständnis von XtraBackup voraus und konzentriert sich ausschließlich auf die Verschlüsselungsfunktionen, die für Backups mit sensiblen Kundendaten unverzichtbar sind.

Wichtig zu wissen ist lediglich, dass XtraBackup die Verschlüsselung während des eigentlichen Backup-Vorgangs Block für Block vornimmt, bevor die Daten überhaupt auf den Zielspeicher geschrieben werden, sodass zu keinem Zeitpunkt eine vollständige, unverschlüsselte Kopie auf dem Zielmedium existiert.

3. Die --encrypt-Optionen im Detail: Algorithmus und Schlüsselquelle

Die zentrale Option --encrypt=AES256 aktiviert die Verschlüsselung mit dem AES-Algorithmus in 256-Bit-Schlüssellänge, dem aktuell empfohlenen Standard für Backup-Verschlüsselung. Der eigentliche Schlüssel kann auf zwei Arten übergeben werden: direkt als Base64-kodierter String über --encrypt-key, was sich vor allem für automatisierte Skripte eignet, bei denen der Schlüssel zur Laufzeit aus einem Secrets-Manager geladen wird, oder über eine Datei mittels --encrypt-key-file, was den Schlüssel nicht in der Prozessliste des Betriebssystems sichtbar werden lässt.

Aus Sicherheitssicht ist --encrypt-key-file gegenüber der direkten Schlüsselübergabe klar vorzuziehen, da Kommandozeilenparameter über ps aux oder ähnliche Werkzeuge von anderen Prozessen auf demselben System eingesehen werden können, während eine Schlüsseldatei mit restriktiven Dateirechten diesem Risiko nicht ausgesetzt ist. Zusätzlich lassen sich mit --encrypt-threads und --encrypt-chunk-size Parallelität und Blockgröße der Verschlüsselung an die verfügbare CPU-Kapazität anpassen.


# Schlüssel generieren und in einer Datei mit restriktiven Rechten ablegen
openssl rand -base64 24 > /etc/xtrabackup/backup.key
chmod 600 /etc/xtrabackup/backup.key
chown mysql:mysql /etc/xtrabackup/backup.key

# Verschlüsseltes Backup erzeugen
xtrabackup --backup --target-dir=/backup/full-2026-08-08 --encrypt=AES256 --encrypt-key-file=/etc/xtrabackup/backup.key --encrypt-threads=4

4. Schlüsselverwaltung: Erzeugung und sichere Ablage

Ein AES256-Schlüssel für XtraBackup lässt sich mit einem einzigen Aufruf von openssl rand -base64 24 erzeugen, wobei der eigentlichen Verwaltung deutlich mehr Aufmerksamkeit gebührt als der reinen Generierung. Der Schlüssel darf niemals im selben Verzeichnis oder auf demselben Speichersystem wie das verschlüsselte Backup selbst liegen, da ein Angreifer mit Zugriff auf den Backup-Speicher sonst auch gleich den passenden Schlüssel vorfindet und die Verschlüsselung wirkungslos wird.

In produktiven Umgebungen sollte der Schlüssel stattdessen in einem dedizierten Secrets-Management-System wie HashiCorp Vault oder einem vergleichbaren Cloud-KMS-Dienst liegen und nur zur Laufzeit des Backup- beziehungsweise Restore-Vorgangs kurzzeitig auf den ausführenden Server geladen werden. Nach Abschluss des Vorgangs sollte die lokale Kopie der Schlüsseldatei aktiv wieder entfernt werden, um die Angriffsfläche zwischen zwei Backup-Läufen zu minimieren.

5. Wiederherstellungs-Workflow: erst entschlüsseln, dann vorbereiten

Ein verschlüsseltes Backup kann nicht direkt mit --prepare weiterverarbeitet werden, da die InnoDB-Redo-Log-Anwendung auf unverschlüsselten Dateien arbeitet. Der erste Schritt jeder Wiederherstellung ist deshalb xtrabackup --decrypt=AES256 mit demselben Schlüssel, der beim Backup verwendet wurde, angewandt auf das Zielverzeichnis, in dem die verschlüsselten Dateien liegen. Erst danach folgt der gewohnte --prepare-Schritt, der die InnoDB-internen Konsistenzmechanismen anwendet und das Backup restore-fähig macht.

Ein häufiger Fehler in der Praxis ist, den Entschlüsselungsschritt zu vergessen und direkt mit --prepare fortzufahren, was zu kryptischen Fehlermeldungen über beschädigte oder unlesbare Dateien führt, da XtraBackup verschlüsselte Dateien nicht als solche erkennt, sondern lediglich fehlerhafte InnoDB-Strukturen sieht. Ein dokumentierter, getesteter Restore-Runbook mit der korrekten Schrittfolge ist deshalb unverzichtbar, gerade weil Wiederherstellungen fast immer unter Zeitdruck während eines echten Vorfalls durchgeführt werden.


# Schritt 1: Entschlüsseln (derselbe Schlüssel wie beim Backup)
xtrabackup --decrypt=AES256 --encrypt-key-file=/etc/xtrabackup/backup.key --target-dir=/backup/full-2026-08-08

# Schritt 2: InnoDB-Konsistenz herstellen
xtrabackup --prepare --target-dir=/backup/full-2026-08-08

# Schritt 3: Wiederherstellung in das Datenverzeichnis kopieren
xtrabackup --copy-back --target-dir=/backup/full-2026-08-08 --datadir=/var/lib/mysql

6. Kombinierte Komprimierung und Verschlüsselung: die richtige Reihenfolge

XtraBackup unterstützt neben der Verschlüsselung auch Komprimierung über --compress, und beide Funktionen lassen sich gemeinsam im selben Backup-Lauf aktivieren, um sowohl Speicherplatz als auch Vertraulichkeit zu adressieren. Intern wendet XtraBackup zunächst die Komprimierung und danach die Verschlüsselung an, was aus kryptografischer Sicht sinnvoll ist, da komprimierte Daten eine höhere Entropie aufweisen und sich dadurch besser für eine Verschlüsselung eignen als unkomprimierte Rohdaten.

Für die Wiederherstellung bedeutet das die entsprechend umgekehrte Reihenfolge: Zuerst muss entschlüsselt werden, danach dekomprimiert über xtrabackup --decompress, und erst danach folgt der übliche --prepare-Schritt. Wer diese Reihenfolge vertauscht, erhält auch hier keine aussagekräftige Fehlermeldung, sondern lediglich unlesbare, scheinbar beschädigte Dateien.

7. Aufbewahrungsstrategie: verschlüsselte Backup-Generationen und Schlüsselrotation

Anders als bei unverschlüsselten Backups genügt es bei verschlüsselten Generationen nicht, veraltete Schlüssel einfach zu löschen, sobald ein neuer Schlüssel im Einsatz ist: Jedes Backup bleibt an genau den Schlüssel gebunden, mit dem es erzeugt wurde, und ein zu früh gelöschter alter Schlüssel macht die dazugehörigen historischen Backups dauerhaft unbrauchbar. Eine sinnvolle Schlüsselrotation, etwa vierteljährlich, muss deshalb Hand in Hand mit der eigentlichen Backup-Aufbewahrungsfrist gedacht werden.

In der Praxis bewährt sich ein Ansatz, bei dem jeder generierte Schlüssel eindeutig mit einem Zeitstempel oder einer Generation-ID versehen und zusammen mit den Metadaten des jeweiligen Backup-Laufs dokumentiert wird, sodass zu jedem historischen Backup eindeutig nachvollziehbar ist, welcher konkrete Schlüssel für eine Wiederherstellung benötigt wird. Alte Schlüssel werden dabei nicht gelöscht, sondern in derselben Secrets-Management-Lösung archiviert, bis auch das letzte damit verschlüsselte Backup gemäss Aufbewahrungsfrist gelöscht wurde.

8. Automatisierung im Cron beziehungsweise in der CI-Pipeline

Für den produktiven Einsatz sollte der gesamte Backup-Vorgang, einschließlich des Ladens des aktuellen Schlüssels aus dem Secrets-Management-System, in einem versionierten Skript automatisiert werden, statt Kommandos manuell auf dem Datenbankserver einzugeben. Ein solches Skript sollte den Schlüssel unmittelbar vor dem Backup-Aufruf temporär auf den Server laden, ihn nach Abschluss des Laufs wieder entfernen und den Erfolg beziehungsweise Misserfolg des Vorgangs an ein Monitoring-System melden.

Ebenso wichtig wie die Automatisierung des Backup-Vorgangs selbst ist die regelmäßige automatisierte Verifikation: Ein Restore-Test in einer isolierten Umgebung, der den vollständigen Entschlüsselungs- und Wiederherstellungs-Workflow durchläuft, deckt zuverlässig auf, ob ein Schlüssel versehentlich falsch dokumentiert wurde oder ein Backup aus anderen Gründen tatsächlich nicht wiederherstellbar ist, lange bevor ein echter Vorfall diese Lücke schmerzhaft offenlegt.

9. Monitoring und Integritätsprüfung verschlüsselter Backups

Ein Backup-Lauf gilt nur dann als abgeschlossen, wenn sowohl der Rückgabewert des xtrabackup-Prozesses als auch eine nachgelagerte Prüfsumme über die erzeugte Archivdatei erfolgreich verifiziert wurden, denn ein abgebrochener oder unvollständiger Lauf kann unter Umständen dennoch eine scheinbar plausible, aber tatsächlich unbrauchbare Zieldatei hinterlassen. Ein zusätzlicher SHA256-Prüfsummen-Abgleich zwischen dem lokal erzeugten Archiv und der Kopie im Zielspeicher deckt zuverlässig auf, ob während der Übertragung Daten verloren gegangen oder beschädigt worden sind.

Für die laufende Überwachung sollte jeder Backup-Lauf seinen Erfolg oder Misserfolg aktiv an ein zentrales Monitoring-System melden, statt sich auf eine rein passive Kontrolle über vorhandene Dateien im Zielverzeichnis zu verlassen, da eine fehlende Meldung selbst dann unbemerkt bleiben kann, wenn ein Cron-Job schlicht nicht mehr gestartet wird. Eine einfache Regel, die Alarm schlägt, sobald für einen Tag kein erfolgreich abgeschlossener, verschlüsselter Backup-Lauf gemeldet wurde, schließt diese Lücke zuverlässig.


# Pruefsumme des lokalen Archivs erzeugen und mit dem Zielspeicher abgleichen
sha256sum /backup/full-2026-08-08.xbstream > /backup/full-2026-08-08.sha256
sha256sum -c /backup/full-2026-08-08.sha256

# Exit-Code des Backup-Laufs an das Monitoring-System melden
xtrabackup --backup --target-dir=/backup/full-2026-08-08 --encrypt=AES256 --encrypt-key-file=/etc/xtrabackup/backup.key
echo "backup_exit_code:$? backup_date:$(date +%F)" | curl -s --data-binary @- https://monitoring.internal/api/backup-status
Option Zweck Beispielwert Hinweis
--encrypt Algorithmus für die Verschlüsselung festlegen AES256 Aktuell einzige unterstützte Algorithmus-Stufe in XtraBackup
--encrypt-key-file Pfad zur Schlüsseldatei /etc/xtrabackup/backup.key Bevorzugt gegenüber --encrypt-key wegen Prozesslisten-Sichtbarkeit
--encrypt-key Schlüssel direkt als Base64-String über Umgebungsvariable geladen Nur für automatisierte Skripte mit Secrets-Injection geeignet
--encrypt-threads Parallelität der Verschlüsselung 4 An verfügbare CPU-Kerne des Backup-Servers anpassen
--decrypt Entschlüsselung vor dem Prepare-Schritt AES256 Zwingend erster Schritt jeder Wiederherstellung eines verschlüsselten Backups

Mironsoft

Datenbank-Performance, Index-Tuning und Magento-DB-Optimierung

Magento-Shop, der an langsamen Datenbankabfragen leidet?

Wir analysieren MySQL-Datenbanken auf Performance-Bremsen, optimieren Indizes und Abfragen gezielt und richten Backup- und Replikationsstrategien ein, die im Ernstfall wirklich funktionieren.

Performance-Audit

Slow Query Log und Explain-Pläne systematisch auf Engpässe untersuchen.

Index-Optimierung

Indizes gezielt für die tatsächliche Abfragelast des Shops aufbauen.

Backup-Strategie

Zuverlässige Backup- und Restore-Prozesse für produktive Magento-Datenbanken einrichten.

10. Zusammenfassung

Backup-Verschlüsselung mit XtraBackup: das Wichtigste auf einen Blick

Algorithmus

AES256 über --encrypt ist der aktuell empfohlene Standard für XtraBackup-Verschlüsselung.

Schlüsseldatei

--encrypt-key-file ist gegenüber der direkten Schlüsselübergabe wegen der Prozesslisten-Sichtbarkeit vorzuziehen.

Restore-Reihenfolge

Erst entschlüsseln, dann bei Bedarf dekomprimieren, erst danach der gewohnte --prepare-Schritt.

Generationen

Alte Schlüssel müssen bis zum Ablauf der zugehörigen Backup-Aufbewahrungsfrist archiviert bleiben.

11. FAQ: Backup-Verschlüsselung mit XtraBackup: das Wichtigste auf einen Blick

1Warum reicht eine sichere Datenbankverbindung allein nicht aus?
Ein Backup ist eine vollständige Kopie der Daten, die häufig auf einem Offsite-Speicher oder bei einem Cloud-Anbieter liegt. Ohne eigene Verschlüsselung der Backup-Datei genügt ein kompromittierter Zugriffsschlüssel für den Speicherdienst, um an alle Kundendaten zu gelangen.
2Welchen Verschlüsselungsalgorithmus verwendet XtraBackup?
AES in 256-Bit-Schlüssellänge, aktiviert über die Option --encrypt=AES256, dem aktuell empfohlenen Standard für Backup-Verschlüsselung.
3Sollte der Schlüssel direkt als Parameter oder über eine Datei übergeben werden?
Über eine Datei mittels --encrypt-key-file, da Kommandozeilenparameter über Werkzeuge wie ps aux von anderen Prozessen auf demselben System eingesehen werden können, eine Schlüsseldatei mit restriktiven Rechten hingegen nicht.
4Wo sollte der Verschlüsselungsschlüssel dauerhaft abgelegt werden?
In einem dedizierten Secrets-Management-System wie HashiCorp Vault oder einem vergleichbaren Cloud-KMS, niemals im selben Verzeichnis oder Speichersystem wie das verschlüsselte Backup selbst.
5Was ist der erste Schritt bei der Wiederherstellung eines verschlüsselten Backups?
Die Entschlüsselung über xtrabackup --decrypt=AES256 mit demselben Schlüssel, der beim Backup verwendet wurde. Erst danach folgt der übliche --prepare-Schritt.
6Was passiert, wenn man den Entschlüsselungsschritt vergisst?
XtraBackup meldet kryptische Fehler über beschädigte oder unlesbare Dateien, da es die verschlüsselten Dateien nicht als solche erkennt, sondern lediglich fehlerhafte InnoDB-Strukturen sieht.
7In welcher Reihenfolge werden Komprimierung und Verschlüsselung angewendet?
Beim Backup zuerst Komprimierung, danach Verschlüsselung, da komprimierte Daten eine höhere Entropie aufweisen. Bei der Wiederherstellung entsprechend umgekehrt: erst entschlüsseln, dann dekomprimieren.
8Kann ein alter Schlüssel nach einer Rotation gelöscht werden?
Erst, wenn auch das letzte damit verschlüsselte Backup gemäss Aufbewahrungsfrist gelöscht wurde. Ein zu früh gelöschter Schlüssel macht die zugehörigen historischen Backups dauerhaft unbrauchbar.
9Wie oft sollte der Verschlüsselungsschlüssel rotiert werden?
Ein vierteljährlicher Rhythmus ist in der Praxis üblich, wobei jede Rotation zusammen mit der Backup-Aufbewahrungsfrist geplant und jeder Schlüssel eindeutig einer Generation zugeordnet dokumentiert werden sollte.
10Warum sind regelmäßige Restore-Tests bei verschlüsselten Backups besonders wichtig?
Ein Restore-Test deckt zuverlässig auf, ob ein Schlüssel falsch dokumentiert wurde oder ein Backup aus anderen Gründen nicht wiederherstellbar ist, lange bevor ein echter Vorfall diese Lücke offenlegt.