Es gibt viele Wege ein Backup der MySQL Datenbank zu erstellen, hier möchte ich nur auf eine Methode hinweisen. Diese sorgt für ein konsistentes Backup und speichert die Daten im Filesystem. Einzelne Parameter können natürlich weggelassen oder angepasst werden.

In den meisten Fällen, wird das Backup auch für MariaDB funktionieren. Laut einem Kunden von mir, ist MariaDB ja das selbe wie MySQL facepalm. 😎

Backup erstellen

Mit folgendem Befehl erstellt ihr ein Backup für alle Datenbanken in eurem DBSM und speichert diese in einem File fullbackup.sql an dem Ort, an dem ihr den Befehl ausgeführt habt.

mysqldump --add-drop-database --all-databases --single-transaction --routines --triggers --flush-logs > fullbackup.sql

Was bedeuten nun die einzelnen Parameter, einmal kurz erläutert.

--add-drop-database

Vor jedem “create database” im Dump wird ein “drop database” hinzugefügt. Das stellt sicher, dass die Daten aus dem Backup auch überschrieben bzw. eingespielt werden können, obwohl die Datenbanken existieren. Ist wichtig, wenn du Backups auf DBMS einspielst, welche mit Backups befühlt sind, welche im Backup sind… doofer Satz.

--all-databases

Überaschung – es werden alle Datenbanken gesichert.

--single-transaction

Setzt einen Checkpoint zum Zeitpunkt des Backups und sorgt so für Konsistenz. Änderungen die nach dem Checkpoint in die Datenbanken fließen, werden nicht mit gesichert.

--routines

Sichert etwaige vorhandene Routinen auf Datenbanken.

--triggers

Sichert etwaige vorhandene Trigger auf Datenbanken

--flush-logs

Schreibt alle offenen Datenbankrequest in den Logs in das Filesystem. Wir vor dem Backup angestoßen.

max_allowed_packet

Es kann, je nach Packetgrößen vorkommen, dass euer Dump mit einer Fehlermeldung mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table tablename at row: 1337 fehlschlägt. Diese Variable liegt im Standard bei 25M.
Um das Problem zu beheben könnt ihr die Variable in der .my.cnf für euren User oder beim Befehlsaufruf von mysqldump anpassen.

mysqldump --max_allowed_packet=1G --add-drop-database --all-databases --single-transaction --routines --triggers --flush-logs > fullbackup.sql

Backup einspielen

Wie wandert der Bums nun wieder in euer DBMS? Auch hier gibt es eine Menge Wege, die auch von eurem Dump abhängen.

Das oben erstellte Backup fullbackup.sql könnt ihr einfach via

mysql < fullbackup.sql

einspielen. Die ssh Session vom Dump sollte nicht abgebrochen werden. Deshalb vielleicht im screen ausführen 🙂 .