Um eine CSV Datei über die Console zu importieren gibt es verschiedene Lösungsansätze. Ich finde diese jedoch am einfachsten.
Natürlich muss beachtet werden, dass das MySQL Passwort im Klartext in der Datei gespeichert wird, aber wenn diese nach dem Import gelöscht oder geschützt wird, kann man dies vernachlässigen.
Die Datei sollte natürlich auf keinen Fall im Document Root des Webservers liegen.
ACHTUNG: Durch das REPLACE werden die vorherigen Daten in der DB überschrieben. Wenn dies nicht gewünscht ist, einfach REPLACE weglassen.
INFILE=/pfad/zur/importdatei/datei.csv
mysql --local-infile=1 -u[USERNAME] -p[PASSWORD] [DATABASE] << EOF
LOAD DATA LOCAL INFILE '$INFILE' REPLACE INTO TABLE [TABLE] CHARACTER SET 'utf8'\
FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\n' \
;
EOF
Die Daten in der CSV müssen mit ; getrennt sein. Jeder Datensatz steht in einer eigenen Zeile und diese wird mit einem Umbruch \n abgeschlossen. Dadurch weiß die DB, dass eine neue Zeile ein neuer Datensatz ist.
Wenn in der CSV pro Datensatz 5 Spalten vorhanden sind, müssen in der Datenbank natürlich ebenfalls 5 Spalten vorhanden sein, da MySQL sonst meckert dass die Felder der CSV nicht mit den Feldern der Datenbank übereinstimmen.
Daniel Falkner meint
Wenn statt -p[PASSWORD] nur -p angegeben wird frägt mysql nach dem Start des Scripts nach dem Passwort.
Florian meint
Klar, bei automatisierten Scritpen ist dies aber schwierig 🙂