Innanzitutto, posso darti la risposta per uno tabella:
Il problema con tutti questi INTO OUTFILE
o --tab=tmpfile
(e -T/path/to/directory
) la risposta è che richiede l'esecuzione di mysqldump sullo stesso server come server MySQL e con quei diritti di accesso.
La mia soluzione era semplicemente usare mysql
(non mysqldump
) con il -B
parametro, inline l'istruzione SELECT con -e
, quindi massaggia l'output ASCII con sed
e termina con CSV inclusa una riga del campo di intestazione:
Esempio:
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","password","cartella","email""8","mariana","xxxxxxxxxx","mariana","""3","squaredesign","xxxxxxxxxxxxxxxxx"," squaredesign","[email protected] ""4","miedziak","xxxxxxxxxx","miedziak","example@sqldat .com ""5","Sarko","xxxxxxxxx","Sarko","""6","LogitransPoland","xxxxxxxxxxxxxx","LogitransPoland","""7","Amos","xxxxxxxxxxxxxxxxxxx"," Amos","""9","Annabelle","xxxxxxxxxxxxxxx","Annabelle","""11","Brandfathers andSons","xxxxxxxxxxxxxxxxx","BrandfathersAndSons","""12","ImagineGroup", "xxxxxxxxxxxxxxxx","ImagineGroup","""13","EduSquare.pl","xxxxxxxxxxxxxxxxx","EduSquare.pl","""101","tmp","xxxxxxxxxxxxxxxxxxxxx","_","example "
Aggiungi un > outfile.csv
alla fine di quella riga, per ottenere il file CSV per quella tabella.
Quindi, ottieni un elenco di tutti i tuoi tavoli con
mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"
Da lì, è solo un altro passaggio per creare un ciclo, ad esempio, nella shell Bash per scorrere quelle tabelle:
for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
echo .....;
done
Tra il do
e ; done
inserisci il comando lungo che ho scritto nella Parte 1 sopra, ma sostituisci il nome della tabella con $tb
invece.