Ich habe einen Weg gefunden, diese Namen manuell einzugeben, solange Sie MySQL 5 oder höher ausführen. Hier ist es, geschrieben als Bash-Skript zum Ausführen auf einer Unix-Befehlszeile:
DBNAME=<database_name>
TABLE=<table_name>
FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv
#(1)creates empty file and sets up column names using the information_schema
mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = '$TABLE';" | awk '{print $1}' | grep -iv ^COLUMN_NAME$ | sed 's/^/"/g;s/$/"/g' | tr '\n' ',' > $FNAME
#(2)appends newline to mark beginning of data vs. column titles
echo "" >> $FNAME
#(3)dumps data from DB into /var/mysql/tempfile.csv
mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE '/var/mysql/tempfile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' FROM $TABLE;"
#(4)merges data file and file w/ column names
cat /var/mysql/tempfile.csv >> $FNAME
#(5)deletes tempfile
rm -rf /var/mysql/tempfile.csv
Obwohl dies nicht die anmutigste Lösung ist, bin ich sicher, dass sie von jemandem, der SQL und/oder Bash etwas besser kennt als ich, in eine einzige Zeile komprimiert werden kann ...
Was es tut, ist:
- verwendet das Informationsschema von MySQL, um eine leere CSV-Datei mit Spaltenüberschriften zu erstellen
- hängt einen zusätzlichen Zeilenumbruch an diese leere CSV-Datei an, sodass Ihre Daten in einer neuen Zeile erscheinen
- verwendet eine ziemlich standardmäßige "SELECT * INTO OUTFILE..."-Abfrage, um eine CSV-Datei voller Daten zu erstellen
- hängt die Datendatei an die Datei mit Spaltenüberschriften an
- löscht die (temporäre) Datendatei
Viel Glück, und wenn Sie es aufräumen, posten Sie Ihre Ergebnisse!