Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Despeje todas as tabelas no formato CSV usando 'mysqldump'


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.