Gestern habe ich mir die grundlegende Verwendung von mysqldump zum Sichern von MySQL-Datenbanken angesehen. Heute sehe ich mir an, wie man mysqldump verwendet, um die Daten aus einer MySQL-Datenbank in CSV- und tabulatorgetrennte Textdateien zu dumpen, anstatt SQL-Insert-Abfragen zu verwenden, was die Standard-Dump-Methode ist.
mysqldump -u -p -T/path/to/directory
Das Flag -u wird verwendet, um den Benutzernamen anzugeben, der verwendet wird, um sich mit dem MySQL-Datenbankserver zu verbinden, und Sie würden den Teil des obigen Beispiels durch Ihren Benutzernamen ersetzen.
Das Flag -p gibt an, dass Sie ein Passwort eingeben müssen, um sich mit der Datenbank zu verbinden; Sie werden danach gefragt, sobald der Befehl ausgeführt wird.
Das Flag -T gefolgt vom Verzeichnisnamen gibt an, wohin MySQL seine Dateien schreibt. Sie können ein Leerzeichen zwischen dem -T und dem Anfang des Verzeichnisnamens setzen oder kein Leerzeichen: Sie haben die Wahl, denn beides funktioniert. Es ist wichtig zu beachten, dass das Verzeichnis, das Sie angeben, für den Benutzer, unter dem der MySQL-Server läuft, schreibbar sein muss. Wenn dies nicht der Fall ist, erhalten Sie eine Fehlermeldung wie diese:
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Wenn auf Ihrem Linux-Rechner SELinux aktiviert ist, muss das Verzeichnis auch in der SELinux-Konfiguration für MySQL zum Schreiben zugelassen sein.
Dateien, die von mysqldump erstellt werden
Bei dem obigen Beispiel mit einer Datenbank, die zwei Tabellen mit den Namen „irgendwas“ und „irgendwas_anders“ hat, werden vier Dateien wie folgt erstellt:
- something.sql – enthält das SQL zum Erstellen der Tabelle. Standardmäßig enthält sie
DROP TABLE IF EXISTS `something`;
als Teil der Abfrage - irgendwas.txt – die Daten aus der Tabelle „irgendwas“ in tabulatorgetrenntem Format
- irgendwas_andere.sql – enthält die SQL zum Erstellen der Tabelle. Standardmäßig enthält sie
DROP TABLE IF EXISTS `something_else`;
als Teil der Abfrage - something_else.txt – die Daten aus der Tabelle „something_else“ im tabulatorgetrennten Format
Wenn Sie nicht möchten, dass die *.sql-Dateien nicht erstellt werden sollen, können Sie dem Befehl mysqldump das Flag -t hinzufügen, und zwar wie folgt:
mysqldump -u -p -t -T/path/to/directory
Bitte beachten Sie, dass selbst dann, wenn der MySQL-Server nicht in das von Ihnen angegebene Verzeichnis schreiben kann, die *.sql-Dateien trotzdem erstellt werden; nur die Textdateien können nicht erstellt werden.
Ändern des Ausgabeformats
Vorgabemäßig wird mysqldump mit dem -T-Flag die Daten in tabulatorgetrennte Dateien ausgeben. Es ist jedoch möglich, das Trennzeichen zu ändern und auch anzugeben, dass die Feldwerte von Anführungszeichen umgeben sind.
Um das Trennzeichen zu ändern, verwenden Sie das Flag --fields-terminated-by=
wie im folgenden Beispiel. In diesem Beispiel werden die Daten in kommagetrennte Werte (CSV) umgewandelt:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
Wenn Sie jedes Feld in Anführungszeichen setzen möchten, verwenden Sie das Flag --fields-enclosed-by=
. In dem folgenden Beispiel ist jedes Feld von Anführungszeichen umgeben. Beachten Sie, dass wir das Anführungszeichen in der Befehlszeile mit einem Schrägstrich abschließen müssen.
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
Die resultierende Datei würde wie das folgende Beispiel aussehen: