Mysql
 sql >> Database >  >> RDS >> Mysql

Scarica tutte le tabelle in formato CSV usando 'mysqldump'

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.