Usando mysqldump para salvar dados em arquivos CSV

, Author

Ontem eu olhei para o uso básico do mysqldump para fazer backup de bancos de dados MySQL. Hoje eu vou ver como usar o mysqldump para fazer o dump dos dados de um banco de dados MySQL para CSV e arquivos de texto delimitados por tabulação, ao invés de usar consultas de inserção de SQL que é o método padrão de dump.

mysqldump -u -p -T/path/to/directory 

A flag -u é usada para especificar o nome de usuário usado para conectar ao servidor de banco de dados MySQL, e você substituiria a parte do exemplo acima pelo seu nome de usuário.

O sinalizador -p indica que você irá digitar uma senha para se conectar ao banco de dados; você será solicitado quando o comando iniciar a execução.

O sinalizador -T seguido do nome do diretório é para onde o MySQL irá escrever seus arquivos. Você pode ter um espaço entre o -T e o início do nome do diretório ou nenhum espaço: cabe a você, pois qualquer um deles funcionará. É importante notar que o diretório que você especificar deve ser gravável pelo usuário que o servidor MySQL roda como. Se não for, você receberá um erro como este:

mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'

Se sua máquina Linux tem SELinux habilitado, então o diretório também deve ser permitido pela configuração SELinux para que o MySQL escreva.

Arquivos criados pelo mysqldump

Utilizando o exemplo acima, com uma base de dados que tem duas tabelas chamadas “something” e “something_else”, quatro arquivos serão criados da seguinte forma:

  • something.sql – contém o SQL para criar a tabela. Por padrão, inclui DROP TABLE IF EXISTS `something`; como parte da consulta
  • something.txt – os dados da tabela “algo” em formato delimitado por tabulação
  • something_else.sql – contém o SQL para criar a tabela. Por padrão, inclui DROP TABLE IF EXISTS `something_else`; como parte da consulta
  • something_else.txt – os dados da tabela “algo_else” em formato delimitado por tabulação

Se você não quiser o *.sql a ser criado, então você pode adicionar o flag -t ao comando mysqldump assim:

mysqldump -u -p -t -T/path/to/directory 

Note que mesmo se o diretório que você especificar não pode ser escrito pelo servidor MySQL, o *.sql ainda serão criados; são apenas os ficheiros de texto que não podem ser criados.

Mudando o formato de saída

Por defeito, o mysqldump com o sinalizador -T irá despejar os dados em ficheiros delimitados por tabulação. Contudo, é possível alterar o delimitador, e também especificar que as aspas rodeiam os valores do campo.

Para alterar o delimitador, use o sinalizador --fields-terminated-by= como no exemplo a seguir. Neste exemplo vamos despejar os dados em valores separados por vírgulas ou CSV:

mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,

Se você também quiser colocar aspas em torno de cada campo, então use o sinalizador --fields-enclosed-by=. No exemplo abaixo, cada campo é rodeado por aspas. Note que precisamos de escapar ao símbolo de aspas na linha de comando com uma barra.

mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,

O ficheiro resultante seria parecido com o seguinte exemplo:

Deixe uma resposta

O seu endereço de email não será publicado.