Tutorial: Automatisierte MySQL-Backups

Betreibt ihr einen eigenen Server, so müsst ihr euch ebenfalls um den Backup eurer Daten kümmern. Da die Datenbank meistens besonders kritische Daten beinhaltet, stelle ich hier vor wie ihr täglich ein Backup eurer MySQL-Datenbank erstellen könnt.

 

Schritt 1 – Backup-Verzeichnis erstellen und schützen

Zuerst solltet ihr ein Backup-Verzeichnis erstellen und dieses vor Zugriff schützen. Hierzu erstellt im Home-Folder ein backup-Verzeichnis und passt die Zugriffsrechte darauf an:

Damit hat nur noch euer Benutzer Zugriff auf das Backup-Verzeichnis.

Schritt 2 – MySQL-Backup-Account erstellen

Es empfiehlt sich, einen speziellen read-only MySQL-Nutzer anzulegen und für Backups zu verwenden. Dieser hat Lesezugriff auf sämtliche Datenbanken.

Dabei solltet ihr YOUR_PASSWORD durch ein sicheres (zufälliges) Passwort ersetzen.

Schritt 3 – Shell-Script für MySQL-Backup erstellen

Folgendes Shell-Script nutzt mysqldump und erstellt für jede Tabelle eine .sql.gz-Datei in eurem Backup-Verzeichnis. Erstellt dafür im backup-Verzeichnis eine Shell-Datei:

Und füllt diese diese Datei mit folgendem Shell-Script:

Dabei müsst ihr /home/EUER_USER/backup/mysql durch den Pfad zu eurem zuvor erstellen Backup-Verzeichnis ersetzen und YOUR_PASSWORD durch das MySQL-Passwort eures Backups austauschen.

Anschließend müsst ihr die Zugriffsrechte der Datei noch anpassen, damit diese ausführbar ist:

Schritt 4 – Shell-Script testen

Testet nun das Shell-Script, indem ihr es in der Kommandozeile ausführt. Im Verzeichnis /home/EUER_USER/backup/mysql solltet ihr nun je eine .sql.gz-Datei je MySQL-Datenbank vorfinden.

Schritt 5 – Backup regelmäßig per Cronjob ausführen

Per Cronjob könnt ihr dieses Shell-Script nun regelmäßig ausführen. Zur Erstellung des Cronjobs führt in der Kommadozeile folgenden Befehl aus:

Dies lässt die Cronjobs eures Benutzers bearbeiten.

Dort sollte eine Datei erscheinen in der ihr den folgenden Cronjob anlegen könnt:

Dabei müsst ihr EUER_USER durch den Benutzernamen eures Accounts ersetzen.

Dieser Cronjob erstellt dann täglich um 4:38 Uhr ein Backup jeder MySQL-Datenbank eures MySQL-Servers. Natürlich könnt ihr auch eine andere Uhrzeit als 4:38 wählen, passt dazu einfach die Werte entsprechend an.

Abschließende Sicherheitshinweise bzgl. Backups

Die Speicherung von Backups auf dem selben Server wie euer MySQL-Server ist nicht empfehlenswert. Sollte es Probleme mit der Festplatte geben oder euer Server gehackt werden, dann ist nicht nur euer MySQL-Server betroffen, sondern auch eure Backups.

Daher ist es dringend erforderlich Backups regelmäßig auf weiteren Rechnern zu speichern. Viele Server- und vServer-Anbieter besitzen Funktionen, womit automatisiert Backups eurer Server erstellt werden können, die dann Extern gespeichert wird.

Unterstützt euer Server-Anbieter keine Backup-Funktion, so könnt ihr die erstellen MySQL-Backups z.B. per E-Mail-Anhang versenden (falls sie nicht zu groß sind). Oder ihr benutzt einen anderen Mechanismus, um eure Backups in einem anderen Speicherverbund zu hinterlegen.

Da ihr immer davon ausgehen solltet das euer Webserver gehackt werden kann, ist es wichtig eure Backup-Strategie so zu planen, dass ein Angreifer eure Backups nicht zerstören kann.

Neben der externen Speicherung der Backups solltet ihr ebenfalls regelmäßig überprüfen, dass die Backups vollständig sind. Leider stellt man oftmals erst nach dem Datenverlust fest, dass die Backups unvollständig sind.