Först kan jag ge dig svaret för en tabell:
Problemet med alla dessa INTO OUTFILE
eller --tab=tmpfile
(och -T/path/to/directory
) svar är att det kräver att mysqldump körs på samma server som MySQL-server och har dessa åtkomsträttigheter.
Min lösning var helt enkelt att använda mysql
(inte mysqldump
) med -B
parameter, infoga SELECT-satsen med -e
, massera sedan ASCII-utgången med sed
, och avsluta med CSV inklusive en rubrikfältrad:
Exempel:
mysql -B -u username -p password database -h dbhost -e "SELECT * FROM accounts;" \
| sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"
"id","login","lösenord","mapp","e-post""8","mariana","xxxxxxxxxx","mariana","""3","squaredesign","xxxxxxxxxxxxxxxxxx"," squaredesign"," .com ""5","Sarko","xxxxxxxxxx","Sarko","""6","LogitransPoland","xxxxxxxxxxxxxx","LogitransPoland","""7","Amos","xxxxxxxxxxxxxxxxxxxx"," Amos","""9","Annabelle","xxxxxxxxxxxxxxxx","Annabelle","""11","Brandfathers andSons","xxxxxxxxxxxxxxxxxx","BrandfathersAndSons","""12","ImagineGroup", "xxxxxxxxxxxxxxxx","ImagineGroup","""13","EduSquare.pl","xxxxxxxxxxxxxxxxxx","EduSquare.pl","""101","tmp","xxxxxxxxxxxxxxxxxxxxxx","_","datle99919de9e99dsqdecom3999dcom "
Lägg till en > outfile.csv
i slutet av den en-liner, för att få din CSV-fil för den tabellen.
Sedan får du en lista över alla dina bord med
mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"
Därifrån är det bara ett steg till att göra en loop, till exempel i Bash-skalet för att iterera över dessa tabeller:
for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
echo .....;
done
Mellan do
och ; done
infoga det långa kommandot jag skrev i del 1 ovan, men ersätt ditt tabellnamn med $tb
istället.