Kurztipp: Tipps und Stolperfallen bei mysqldump-Backups
Zur Sicherung von MySQL-Datenbanken wird ein sehr nützliches Tool mitgeliefert: mysqldump. Anbei einige Tipps, die das Backup-Vergnügen vereinfachen oder überhaupt erst ermöglichen.
Der Artikel erhebt nicht den Anspruch, vollständig zu sein. Ich werde ihn nach Belieben erweitern. Wer hier einen Tipp vermisst, kann mich das gerne wissen lassen. 🙂
Mehrere Datenbanken sichern
Wer mehrere Datenbanken sichern möchte, hat vermutlich keine Lust mehrere Statements abzusetzen:
1# mysqldump dataA -u root -p > data.sql
2# mysqldump dataB -u root -p >> data.sql
3# mysqldump dataC -u root -p >> data.sql
Ein Blick in die Manpage verrät - dafür gibt es den Schalter --databases
:
1# mysqldump --databases dataA dataB dataC -u root -p > data.sql
Wer alle Datenbanken eines Servers sichern will, kann das mit dem Schalter --all-databases leicht umsetzen:
1# mysqldump --all-databases -u root -p > data.sql
Maximale Paketgröße wird übeschritten
Der Paketpuffer ist in der Regel auf 25 MB beschränkt, wenn größere Dumps generiert werden, kommt es hier oft zu Problemen:
1mysqldump: Got packet bigger than 'max_allowed_packet' bytes
Für mysqldump
gibt es hier einen Schalter (--max_allowed_packet), um die Puffergröße zur Laufzeit anzupassen:
1# mysqldump database -u user -p --max_allowed_packet=512M > data.sql
Wer häufig größere Dumps erzeugt, sollte darüber nachdenken, für mysqldump
eine Sektion mit angepasster max_allowed_packet
-Variable in der MySQL-Konfigurationsdatei (/etc/my.cnf
) zu definieren:
1# vi /etc/my.cnf
2...
3
4[mysqldump]
5max_allowed_packet = 512M
Got errno 28 on write
In aller Regel erscheint diese nichtssagende Fehlermeldung, wenn das Verzeichnis, in dem der Dump gesichert wird, "volläuft". Ein Blick auf df
hilft hier:
1# df -h .
2Dateisystem Größe Benut Verf Ben% Eingehängt auf
3/dev/vda5 9,8G 9,8G 0 100% /var/lib/mysql
Wiederherstellen sehr großer MySQL-Dumps
Bei sehr großen MySQL-Dumps kann es vorkommen, dass o.g. mysqldump
-Trick mit verwendetem --max_allowed_packet
-Schalter nicht greift und auch utopische große Werte keine Abhilfe schaffen:
1# mysql -u root -p --max_allowed_packet=3072000M < backup.sql
2Warning: option 'max_allowed_packet': unsigned value 3221225472000 adjusted to 2147483648
3Enter password:
4ERROR 1153 (08S01) at line 226: Got a packet bigger than 'max_allowed_packet' bytes
Abhilfe schafft das temporären Anpassen der o.g. Variable im MySQL-Server:
1$ echo "SET GLOBAL max_allowed_packet=1000000000000;" | mysql -u root -p
Und schon klappt auch der Import:
1# mysql -u root -p < backup.sql
2Enter password:
3#