Como exportar um arquivo CSV da linha de comando do MySQL

Conteúdo

Transporte de dados entre aplicativos.

Arquivos de valores separados por vírgula (CSV) eles são uma forma de transferir dados entre aplicativos. Bancos de dados como MySQL e software de planilha como Excel suportam importação e exportação via CSV, então você pode usar Arquivos CSV para trocar dados entre os dois.

Arquivos CSV são texto simples, então eles são naturalmente leves e fáceis de exportar do MySQL.

Do servidor de banco de dados

Se você tiver acesso ao servidor no qual o MySQL está sendo executado, você pode exportar uma seleção com o INTO OUTFILE comando.

ID select, coluna1, column2 FROM table
INTO OUTFILE '/tmp/mysqlfiles/table.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'

Isso vai gerar um arquivo CSV para /tmp/mysqlfiles/table.csv, ou onde você configurou. Você precisará ter certeza de que o usuário executando MySQL (geralmente mysql o root) tem propriedade e escrever acesso ao diretório.

Você também precisará ter certeza de que secure_file_priv A configuração permite que o MySQL acesse esse diretório. Esse, por padrão, bloqueia o acesso de leitura e gravação a consultas SQL. Isto é uma coisa boa; se o seu código é vulnerável a injeção de SQL, qualquer invasor em potencial teria acesso apenas ao MySQL e não ao resto do sistema de arquivos.

Você pode colocar diretórios específicos na lista de permissões editando o arquivo de configuração do MySQL (geralmente localizado em /etc/my.cnf) para incluir:

[mysqld]
secure-file-priv = "/tmp / mysqlfiles"

O que permitirá que o MySQL leia e grave em /tmp/mysqlfiles/ (com o que você deve criar mkdir). Uma vez que o MySQL pode exportar arquivos, deve ser capaz de executar a consulta e gerar arquivos CSV.

Com ele ENCLOSED BY configuração, vírgulas terão escape correto, como um exemplo:

"3","Fuga, isto","tb, isto"

Que você pode pegar e importar diretamente para qualquer programa de planilha ou outro software.

Folha de cálculo de uma lista separada por vírgulas.

Observe que o arquivo CSV exportado não inclui cabeçalhos de coluna, mas as colunas estarão na mesma ordem que o SELECT demonstração. Ao mesmo tempo, valores nulos serão exportados como N, qual é o comportamento esperado, mas se você quiser mudar isso, você pode modificar a seleção envolvendo ifnull(field, "") em torno de seus campos em seus SELECT demonstração.

Na linha de comando do MySQL

Se você só tiver acesso de linha de comando à instância do MySQL, e você não tem acesso ao próprio servidor (como quando você não consegue, em caso de Amazon RDS), o problema é um pouco mais complexo. Enquanto você pode usar FIELDS TERMINATED BY ',' no servidor para gerar uma lista separada por vírgulas, A CLI do MySQL será tabulada por padrão.

Basta inserir uma consulta na linha de comando e canalizá-la para um arquivo:

mysql -u root -e "selecionar * do banco de dados;" > output.tsv

Porque a saída do MySQL é tabulada, isso é chamado de arquivo TSV, para “valores separados por guias”, e pode funcionar no lugar do arquivo CSV em alguns programas, como importações de planilhas. Mas não é um arquivo CSV e convertê-lo em um é complicado.

Você pode simplesmente substituir cada guia por uma vírgula, que funcionaria, mas faria com que ele falhasse se houvesse vírgulas nos dados de entrada. Se você tem certeza absoluta de que não há vírgulas em seu arquivo TSV (consulte com grep), você pode substituir as guias por sed:

sed "s / t /, / g" output.tsv > output.csv

Mas se você tiver vírgulas em seus dados, você terá que usar um muito mais tempo frase regular:

sed "s / '/' /;s / t /","/g;s / ^ /"/;s / $ /"/;s / n // g" output.tsv > output.csv

Isso escapará corretamente dos campos citados, o que vai resolver o problema das vírgulas.

Observação: o caractere de tabulação t isto é fora do padrão. No macOS e BSD, não está habilitado, que gera uma desordem de cada “t” minúscula causando sed inserir vírgulas erradas. Para resolver isso, você deve usar um caractere de tabulação literal em vez de t:

sed "s / /, / g" output.tsv > output.csv

Se seus dados de entrada contiverem guias, você está sem sorte e terá que gerar você mesmo um arquivo CSV com uma linguagem de script.

Faça isso manualmente com uma linguagem de programação real

MySQL (e a maioria dos bancos de dados) são projetados para interagir com ele, então você provavelmente já tem algum tipo de linguagem de programação conectada ao MySQL. A maioria das linguagens também pode gravar no disco, para que você possa criar seus próprios scripts de saída CSV lendo os campos do banco de dados diretamente, escapá-los corretamente e escrever um arquivo delimitado por vírgulas.

Um exemplo em Python.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.