Importar dados de um arquivo de texto puro, desde que ele esteja pronto e organizado, é uma das formas de rapidamente povoar uma tabela em um banco de dados MySQL.
A declaração LOAD DATA INFILE é capaz de carregar as linhas de um arquivo texto para dentro de uma tabela em alta velocidade. Esta função é adequada para trabalhos que envolvam grande volume de dados.
Se o volume de dados for significativamente grande e você estiver preocupado em manter a disponibilidade do servidor a vários outros clientes, use a diretiva LOW_PRIORITY na declaração — o seu efeito é “segurar” a execução até que não haja outros clientes lendo dados na tabela (isto só afeta storage engines como MyISAM, MEMORY e MERGE).
Veja um exemplo de funcionamento do LOAD DATA, lendo o arquivo ‘minhatabela.txt’ e gravando seu conteúdo na tabela ‘minhatabela’:
LOAD DATA LOCAL INFILE 'minhatabela.txt' INTO TABLE minhatabela;
No caso de querer importar um arquivo para dentro de uma tabela que se encontre em um banco de dados diferente do que está atualmente selecionado, indique explicitamente o nome deste banco de dados.
No exemplo abaixo, o banco de dados ‘tutorial’ é indicado na linha de comando:
LOAD DATA LOCAL INFILE 'minhatabela.txt' INTO TABLE tutorial.minhatabela;
O sistema de banco de dados também inclui um utilitário de linha de comando, chamado mysqlimport, que tem a mesma função.
Você pode usar diretiva CONCURRENT, em tabelas MyISAM, que permite que outros clientes façam requisições à mesma tabela em que o LOAD DATA está trabalhando. Esta opção afeta a performance da tarefa de importação de dados, mesmo que nenhuma outra thread esteja fazendo uso da tabela ao mesmo tempo.
Ao usar o LOCAL com a declaração LOAD DATA, uma cópia do arquivo é criada diretório temporário do servidor — em sistemas GNU/Linux, ele fica /tmp
.
Se você não tiver espaço suficiente na partição em que o diretório /tmp se encontra, a declaração LOAD DATA LOCAL irá falhar e retornar um erro.
Por questão de segurança, o usuário que iniciou a sessão do mysql tem que ter permissões de leitura relativas ao arquivo texto que está tentando importar.
Se você se deparar com o erro The used command is not allowed with this MySQL version, leia este artigo, para saber como resolver.
Verifique a validade dos arquivos que deseja importar sempre.
O LOAD DATA tem várias opções de controle sobre como fazer a leitura do arquivo de dados — mas estas opções só dizem respeito à estrutura do arquivo.
Cuidados ao carregar arquivos em português, com acentuação no MySQL
Você provavelmente terá que checar e preprocessar seu arquivo, antes de iniciar o processo de importação — este é o caso, por exemplo de arquivos UTF8 (padrão no GNU/Linux), com acentuações, cedilhas etc.
Se o arquivo estiver tratado e exibindo os caracteres especiais da língua portuguesa adequadamente, você pode indicar a codificação adequada pro MySQL.
No exemplo que segue, vou importar um arquivo de dados (/home/henry/KJV/port/biblia.txt
para dentro da tabela biblia
) codificado em UTF8 (CHARACTER SET utf8
):
LOAD DATA LOCAL INFILE '/home/henry/KJV/port/biblia.txt' INTO TABLE biblia CHARACTER SET utf8;
Referências
Documentação oficial do MySQL: https://dev.mysql.com/doc/refman/5.7/en/load-data.html