mysqldump mit UTF-8 Problemen… korrekte Ausgabe des Backups in eine Datei

Ich bin gerade auf einem Unixsystem eingeloggt und warte auf mysqldump. Ich hatte mit dem Kunden telefoniert und über die nächsten Schritte gesprochen: “für ein Testsystem ist ein Datenbankexport unbedingt erforderlich”. Soweit ok. Es war nicht ganz so einfach, trotz NDA & Co. Zugang zur Datenbank zu bekommen. Darum sollte ich den Export gestellt bekommen: “Wir bereiten den mysqldump vor und laden ihn auf den neuen Server”.

Genau dieser Export hat mich nun veranlasst, diesen kurzen Beitrag zu schreiben. Denn in der Regel erstellen wir die selbst und haben den ganzen Prozess unter Kontrolle. Wir bekommen aber wie in diesem Fall eben immer wieder von Kunden MySQL Backups zur Verfügung gestellt. Und da kommt es manchmal zu Problemen. In diesem Fall mit Umlauten (UTF-8).

Sicher ist mysqldump kein Hexenwerk Noch aus Zeiten vor Unicode & Co. gibt es nämlich Tutorials rund um mysqldump. Es wird immer gezeigt, wie die Ausgabe umgelenkt wird:

Unicode-Probleme mit mysqldump: Die Ausgabe nicht einfach umlenken

Folgende Aufruf führt immer wieder zu Problemen mit Unicode. SO ALSO BESSER NICHT (bessere Weg siehe unten):

mysqldump -u meinuser -p meinedatenbank > dump-mit-unicodeproblemen.sql

Die Ausgabeumlenkung hat zumindest auf manchen Systemen Probleme mit Unicodezeichen. Es gibt auch immer noch ziemlich alte Unix/Linux Installationen. Egal auf welchem System Sie sind und was in Zukunft noch kommt, nutzen Sie den sicheren Weg.

Der richtige Weg für MySQL Backups

Eine Sicherung der Datenbank erstellen Sie am besten mit dem Parameter “-r”. Damit geben Sie an, in welcher Datei das Ergebnis gespeichert wird. Dies hier ist der deutlich bessere Weg:

mysqldump -u meinuser -p meinedatenbank -r solides-backup-mit-utf8.sql

Wenn Sie von nun an über mysqldump sprechen, schreiben oder nachdenken… nutzen Sie nicht mehr die Ausgabeumleitung. Lassen Sie mit uns gemeinsam den alten Weg aussterben. Aktualisieren Sie ihre eigene Dokumentation. Erklären Sie es wie hier gezeigt. Und schon sind die Probleme eines Tages ausgestorben. Unsere Volkswirtschaft wird es ihnen danken.

Der Vollständigkeit halber: Die anschließende Komprimierung sollte natürlich trotzdem nicht fehlen.

SQL Export komprimieren

Die Komprimierung kann nun per Gzip (etwas schneller) oder Bzip2 (Resultat kleiner) erfolgen. Wahlweise also:

gzip meindump.sql

…oder…:

bzip2 meindump.sql

Das lohnt sich in der Regel deutlich. Aus einer ca. 3,2 GB großen Datei wurde bei der Erstellung dieses Artikels eine 358MB große Version mit bzip2.