Eu gostaria de evitar o mysqldump, uma vez que ele sai em um formato que só é conveniente para o mysql ler. CSV parece mais universal (um arquivo por tabela está bem). Mas se houver vantagens no mysqldump, sou todo ouvidos. Além disso, gostaria de algo que possa executar na linha de comando (linux). Se for um script mysql, dicas de como fazer isso seriam úteis.
mysql
command-line
csv
backup
Dreeves
fonte
fonte
Respostas:
Se você consegue lidar com uma tabela de cada vez e seus dados não são binários, use a
-B
opção domysql
comando. Com esta opção, ele irá gerar arquivos TSV (separados por tabulação) que podem ser importados para o Excel, etc, com bastante facilidade:Como alternativa, se você tiver acesso direto ao sistema de arquivos do servidor, use o
SELECT INTO OUTFILE
que pode gerar arquivos CSV reais:fonte
\. file.sql
lê). Como tal, dependendo da sua instalação, você provavelmente o encontrará em/var/lib/mysql/[db_name]/table.csv
No próprio MySQL, você pode especificar a saída CSV como:
De http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
fonte
Você pode despejar um banco de dados inteiro de uma vez com a
mysqldump's --tab
opção. Você fornece um caminho de diretório e ele cria um.sql
arquivo com aCREATE TABLE DROP IF EXISTS
sintaxe e um.txt
arquivo com o conteúdo, separados por tabulação. Para criar arquivos separados por vírgulas, você pode usar o seguinte:Esse caminho precisa ser gravável pelo usuário mysql e pelo usuário que executa o comando, portanto, para simplificar, recomendo
chmod 777 /tmp/path_to_dump/
primeiro.fonte
mysqldump: You must use option --tab with --fields-...
GRANT FILE ON *.* TO 'user1'@'localhost';
- stackoverflow.com/a/15014385/1707015 . No meu caso, eu tive que pegar/var/lib/mysql-files/
(ao invés de/tmp/
), definir o usuário para mysql: mysql e definir os direitos para 777 - stackoverflow.com/a/32737616/1707015 .A opção select into outfile não funcionaria para mim, mas a forma indireta abaixo de enviar arquivo delimitado por tabulação através do SED funcionou:
fonte
t
substituição da letra por", "
no arquivo de saída. Não exatamente o que eu estava procurando.Aqui está o comando mais simples para ele
Se houver uma vírgula no valor da coluna, podemos gerar .tsv em vez de .csv com o seguinte comando
fonte
mysql -hlocalhost -uroot -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > /tmp/output.csv
`Se você realmente precisa de um "Backup", também precisa do esquema de banco de dados, como definições de tabelas, definições de visualização, procedimentos de armazenamento e assim por diante. Um backup de um banco de dados não é apenas dos dados.
O valor do formato mysqldump para backup é especificamente que é muito FÁCIL usá-lo para restaurar bancos de dados mysql. Um backup que não é restaurado facilmente é muito menos útil. Se você está procurando um método para fazer backup confiável dos dados do mysql para que possa restaurar para um servidor mysql, acho que você deve ficar com a ferramenta mysqldump.
O Mysql é gratuito e funciona em muitas plataformas diferentes. Configurar um novo servidor mysql para o qual posso restaurar é simples. Não estou nem um pouco preocupado em não conseguir configurar o mysql para fazer uma restauração.
Eu ficaria muito mais preocupado com a falha de um backup / restauração personalizado baseado em um formato frágil, como csv / tsv. Tem certeza de que todas as aspas, vírgulas ou tabulações que estão em seus dados seriam escapadas corretamente e, em seguida, analisadas corretamente por sua ferramenta de restauração?
Se você está procurando um método para extrair os dados, veja vários nas outras respostas.
fonte
Você pode usar o script abaixo para obter a saída para arquivos csv. Um arquivo por tabela com cabeçalhos.
user é o seu nome de usuário, password é a senha se você não quiser ficar digitando a senha para cada tabela e mydb é o nome do banco de dados.
Explicação do script: A primeira expressão em sed substituirá as tabulações por "," portanto, você tem os campos entre aspas duplas e separados por vírgulas. O segundo inserir aspas duplas no início e o terceiro inserir aspas duplas no final. E o último cuida do \ n.
fonte
--skip-column-names
na minha versão do mysql, tambémVerifique mk-parallel-dump que faz parte do conjunto de ferramentas maatkit sempre útil . Isso pode despejar arquivos separados por vírgula com a opção --csv.
Isso pode fazer todo o seu banco de dados sem especificar tabelas individuais, e você pode especificar grupos de tabelas em uma tabela de conjunto de backup.
Observe que ele também despeja definições de tabela, visualizações e acionadores em arquivos separados. Além de fornecer um backup completo de uma forma mais universalmente acessível, também pode ser restaurado imediatamente com mk-parallel-restore
fonte
maatkit
parece fazer parte dopercona toolkit
agora, mas não consigo encontrar as ferramentas correspondentes.Resposta do PowerShell de duas linhas:
Boom-bata-boom
-D
= o nome do seu banco de dados-e
= consulta-B
= delimitado por tabulaçãofonte
Se você quiser despejar todo o banco de dados como csv
fonte