Ten eerste kan ik u het antwoord geven voor één tafel:
Het probleem met al deze INTO OUTFILE
of --tab=tmpfile
(en -T/path/to/directory
) antwoorden is dat het uitvoeren van mysqldump . vereist op dezelfde server als de MySQL-server en met die toegangsrechten.
Mijn oplossing was gewoon om mysql
. te gebruiken (niet mysqldump
) met de -B
parameter, inline de SELECT-instructie met -e
en masseer vervolgens de ASCII-uitvoer met sed
, en eindigen met CSV inclusief een kopveldrij:
Voorbeeld:
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", "wachtwoord", "map", "e-mail""8", "mariana", "xxxxxxxxxxxx", "mariana", """3","vierkantontwerp","xxxxxxxxxxxxxxxxxx"," squaredesign","[email protected] ""4","miedziak","xxxxxxxxxx","miedziak","voorbeeld@sqldat .com ""5","Sarko","xxxxxxxxx","Sarko","""6","LogitransPoland","xxxxxxxxxxxxxxx","LogitransPoland","""7","Amos","xxxxxxxxxxxxxxxxxxxxx"," Amos","""9","Annabelle","xxxxxxxxxxxxxxxx","Annabelle","""11","Brandfathers and Sons","xxxxxxxxxxxxxxxxxx","BrandfathersAndSons","""12","ImagineGroup", "xxxxxxxxxxxxxxxxxx","ImagineGroup","""13","EduSquare.pl","xxxxxxxxxxxxxxxxxx","EduSquare.pl","""101","tmp","xxxxxxxxxxxxxxxxxxxxxxxx","_","
Voeg een > outfile.csv
toe aan het einde van die one-liner, om uw CSV-bestand voor die tabel te krijgen.
Krijg vervolgens een lijst van alle uw tafels met
mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"
Vanaf daar is het nog maar één stap om een lus te maken, bijvoorbeeld in de Bash-shell om over die tabellen te itereren:
for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
echo .....;
done
Tussen de do
en ; done
voeg het lange commando in dat ik hierboven in Deel 1 heb geschreven, maar vervang je tabelnaam door $tb
in plaats daarvan.