Mai 28 2012
mysql-Datenbank Backup
Es ist immer wieder erschreckend, wie manche Leute mit Datenbank-Backups umgehen. Deshalb mal kurz ein paar Infos, damit die Leser es besser machen als manch “professioneller” Hoster:
Cold Backups
Viele Jahre ist es her, da war eine beliebte Strategie, das Dateisystem einfach zu kopieren, typischerweise /var/lib/mysql/. In diesem Ordner gibt es für jede Datenbank einen separaten Unterordner, der recht simpel kopiert werden konnte. Das war allerdings zu Zeiten, als die Datenbankformate noch limierter waren. Seit den Zeiten von innoDB ist das nämlich nicht so einfach:
- Je nach Konfiguration werden alle innoDB-Tabellen aller Datenbanken in einer Datei gesichert – also nicht mehr getrennt nach Datenbank, womit das Widerherstellen kritisch ist.
- Wenn man es schon eingestellt hat, dass die innoDB-Daten separat gespeichert werden, dann muss man vorher den mySQL-Server stoppen, damit das Backup konsistent ist. Ohne diesen Stop des Datenbankservers kann es sein, dass Referenzen zwischen den Tabellen nicht stimmen. Das Herunterfahren des Datenbankservers ist aber kritisch, da damit das Webangebot selbst ja nicht erreichbar ist. Erstaunlicherweise ignorieren viele dieses Problem und führen sogenannte “Cold Backups” ohne Server-Stop durch. Sehr gefährlich!
In der Enterprise-Version von mySQL gibt es inzwischen die Möglichkeit für “Hot Backups”, also Backups ohne Stop der Datenbank. Aber die wenigsten dürften eine Enterprise-Version ihr eigen nennen.
mysqldump
Die mit Abstand sicherste Methode für Datenbank-Backups ist die Verwendung von mysqldump. Es werden versionsunabhängige Text-Backups erstellt, die sich einfach umziehen lassen, einfach wiederherstellen lassen und vor allem, die konsistent sind. Die Verwendung ist mindestens so einfach, allerdings gibt es Probleme bei sehr großen Datenbanken, weil die Performance doch deutlich leidet. In der Praxis hatte ich damit bisher aber nur Probleme bei mehreren Gigabyte großen Tabellen.
Bin für Kommentare bzgl. euren Backup-Strategien sehr gespannt.

