Primeiro, posso lhe dar a resposta para um tabela:
O problema com todos esses
INTO OUTFILE
ou --tab=tmpfile
(e -T/path/to/directory
) é que requer a execução do mysqldump no mesmo servidor como o servidor MySQL e ter esses direitos de acesso. Minha solução foi simplesmente usar
mysql
(não mysqldump
) com o -B
parâmetro, inline a instrução SELECT com -e
, então massageie a saída ASCII com sed
, e termine com CSV incluindo uma linha de campo de cabeçalho:Exemplo:
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","senha","pasta","email""8","mariana","xxxxxxxxxx","mariana","""3","squaredesign","xxxxxxxxxxxxxxxxx"," squaredesign","[email protected] ""4","miedziak","xxxxxxxxxx","miedziak","example@sqldat .com ""5","Sarko","xxxxxxxxx","Sarko","""6","LogitransPolônia","xxxxxxxxxxxxxx","LogitransPolônia","""7","Amos","xxxxxxxxxxxxxxxxxxxx"," Amos","""9","Annabelle","xxxxxxxxxxxxxxxxxx","Annabelle","""11","Brandfathers andSons","xxxxxxxxxxxxxxxxx","BrandfathersAndSons","""12","ImagineGroup", "xxxxxxxxxxxxxxxx","ImagineGroup","""13","EduSquare.pl","xxxxxxxxxxxxxxxxx","EduSquare.pl","""101","tmp","xxxxxxxxxxxxxxxxxxxxx","_"," "
Adicione um
> outfile.csv
no final desse one-liner, para obter seu arquivo CSV para essa tabela. Em seguida, obtenha uma lista de todos suas mesas com
mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"
A partir daí, é apenas mais um passo para fazer um loop, por exemplo, no shell Bash para iterar sobre essas tabelas:
for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
echo .....;
done
Entre o
do
e ; done
insira o comando longo que escrevi na Parte 1 acima, mas substitua seu nome de tabela por $tb
em vez de.