sql >> Base de Datos >  >> RDS >> Mysql

Volcar todas las tablas en formato CSV usando 'mysqldump'

Primero, puedo darte la respuesta para uno tabla:

El problema con todos estos INTO OUTFILE o --tab=tmpfile (y -T/path/to/directory ) responde que requiere ejecutar mysqldump en el mismo servidor como el servidor MySQL, y tener esos derechos de acceso.

Mi solución fue simplemente usar mysql (no mysqldump ) con el -B parámetro, inserte la instrucción SELECT con -e , luego masajee la salida ASCII con sed y termina con CSV que incluye una fila de campo de encabezado:

Ejemplo:

 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","contraseña","carpeta","email""8","mariana","xxxxxxxxxx","mariana","""3","squaredesign","xxxxxxxxxxxxxxxxx"," diseño cuadrado","[email protected] ""4","miedziak","xxxxxxxxxx","miedziak","ejemplo@sqldat .com ""5","Sarko","xxxxxxxxx","Sarko","""6","LogitransPolonia","xxxxxxxxxxxxxx","LogitransPolonia","""7","Amos","xxxxxxxxxxxxxxxxxxxx"," Amos",""9","Annabelle","xxxxxxxxxxxxxxxxxx","Annabelle",""11","Padres e hijos","xxxxxxxxxxxxxxxxx","Padres e hijos","""12","ImagineGroup", "xxxxxxxxxxxxxxxx","ImagineGroup","""13","EduSquare.pl","xxxxxxxxxxxxxxxxx","EduSquare.pl","""101","tmp","xxxxxxxxxxxxxxxxxxxxx","_","

Agrega un > outfile.csv al final de esa frase, para obtener su archivo CSV para esa tabla.

A continuación, obtenga una lista de todos tus mesas con

mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"

A partir de ahí, es solo un paso más para hacer un bucle, por ejemplo, en el shell de Bash para iterar sobre esas tablas:

 for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
     echo .....;
 done

Entre el do y ; done inserte el comando largo que escribí en la Parte 1 anterior, pero sustituya su nombre de tabla con $tb en su lugar.