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 🙂 .
Schreibe einen Kommentar