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: