Tutorial MySQL – Como importar banco de dados muito grande
Estudo de caso com o MySQL
- Utilização em servidor Linux (Ubuntu)
- Utilizando banco de dados MySQL
- Arquivo do banco de dados é muito grande e não consegue importar diretamente
Situação Problema com o Dump do MySQL
Tem a necessidade de subir um arquivo .SQL de um banco de dados MySQL, mas este é muito grande (usualmente acima de 30GB) e sempre ocorre algum erro durante o processo? Tem acesso ao servidor Linux por linha de comando? Caso positivo, siga este tutorial.
O que realmente acontece?
Importar arquivos muito grandes de banco de dados pode ser um problema. Muitas vezes o sistema possui poucos recursos, ou o mysql se embanana todo e ocorre um crash devido ao tamanho do arquivo.
Como contornar este problema de importação deste Dump muito grande do MySQL?
Passo 1: Dividir o arquivo de dump .sql em arquivos menores utilizando o comando split do Linux
Navegue até a pasta do backup
cd /home/backups
Crie uma pasta para guardar os arquivos divididos
mkdir /home/backups/BD_dividido
Execute o comando para dividir o arquivo de dump em arquivos menores
split -n 300 arquivo_muito_grande_backup.sql BD_dividido/bd_
Observação: O prefixo “-n 300” do comando acima é a opção que cada arquivo dividido tenha apenas 300 linhas. O arquivo a ser dividido chama arquivo_muito_grande_backup.sql e os arquivos menores serão salvos na pasta BD_dividido e vão ter nomes sequenciais do tipo: bd_aa, bd_ab, etc.
Passo 2: Subir os arquivos do banco (divididos) para o MySQL
Primeiro vamos acessar a pasta onde os arquivos foram salvos
cd /home/backups/BD_dividido
Agora, vamos enviar a sequência de arquivos para o MySQL:
cat bd_* | mysql -u root -p nome_do_banco
Observação: A sintaxe “cat bd_*” é para enviar os arquivos sequenciais do banco. O prefixo “-u root” é referente ao nome de usuário root. O prefixo “-p” informa que o usuário usa uma senha e a mesma vai ser solicitada ao digitar o comando. Caso o arquivo de dump já tenha as informações de criação do banco, a informação “nome_do_banco pode ser suprimida, caso contrário, informe para qual banco os dados devem ser inseridos.
Como verificar que o processo está em andamento?
Não há nenhum output direto do comando acima, pois os dados são enviados diretamente ao mysql. Porém caso aconteça um erro, o mesmo será informado e a importação será interrompida.
Como verificar o desempenho e o fluxo de dados?
É possível conectar no MySQL e ver a fila de processamento:
mysql -u root -p
show processlist;
É possível verificar o aumento de espaço em disco da pasta do banco:
du -s /var/lib/mysql
Em ambos os casos, basta executar os comandos várias vezes e verificar o andamento/evolução do procedimento.