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.