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.

Vinicius Paes
Visão Geral sobre Privacidade (Privacy Overview)

Este site utuliza "cookies" para que possamos oferecer uma melhor experiência de usuário. As informações dos "cookies" são armazenadas em seu navegador e executam funções como reconhecê-lo quando você retorna ao nosso site e ajudar nossa equipe a entender quais seções do site você considera mais interessantes e úteis.