Jag kom på ett sätt att behöva ange dessa namn manuellt så länge du kör MySQL 5 eller högre. Här är det skrivet som ett bash-skript för att köras på en unix-kommandorad:
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
Även om det inte är den mest graciösa lösningen, är jag säker på att den kan komprimeras till en enda rad av någon som kan SQL och/eller bash lite bättre än jag...
Vad den gör är:
- använder MySQL:s informationsschema för att skapa en tom CSV med kolumnrubriker
- lägger till en extra rad i den tomma CSV-filen så att din data börjar visas på en ny rad
- använder en ganska vanlig "SELECT * INTO OUTFILE..."-fråga för att skapa en CSV full med data
- lägger till datafilen i filen med kolumnrubriker
- tar bort den (tillfälliga) datafilen
Lycka till, och om du städar upp det, posta dina resultat!