Melhor método para transferir / clonar grandes bancos de dados MySQL para outro servidor

0

Estou executando um aplicativo da Web em um ambiente de hospedagem compartilhada que usa um banco de dados MYSQL que tem cerca de 3 GB de tamanho.

Para fins de teste, configurei um ambiente XAMPP em minha máquina macOS local. Para copiar o banco de dados on-line para minha máquina local, usei mysqldump no servidor e importei diretamente o arquivo de despejo para mysql :

// Server
$ mysqldump -alv -h127.0.0.3 --default-character-set=utf8 -u dbUser -p'dbPass' --extended-insert dbName > dbDump.sql

// Local machine
$ mysql -h 127.0.0.3 -u dbUser -p'dbPass' dbName < dbDump.sql

A única otimização aqui é o uso de extended-insert . No entanto, a importação demora cerca de 10 horas !

O arquivo mudo já inclui comandos para desabilitar verificações de chaves exclusivas e estrangeiras para acelerar a importação:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

Eu não sou uma exportação do SQL e não tenho certeza se os comandos /*!40014 são executados ou não, então adicionei SET FOREIGN_KEY_CHECKS=0; manualmente ao arquivo para garantir que as verificações estejam desabilitadas. No entanto, isso não faz diferença.

Por que demora tanto tempo para importar os dados? Existe uma maneira melhor / mais rápida de fazer isso?

O servidor não é o mais rápido (hospedagem compartilhada ...), mas leva apenas cerca de 2 minutos para exportar / despejar os dados. Que exportar (sem verificações de sintaxe, sem análise, apenas escrevendo ...) é mais rápido do que importar (análise, verificação de sintaxe, etc.) não é surpreendente, mas 300 vezes mais rápido (10 horas vs. 2 minutos)? Esta é uma diferença enorme ...

Não há outra solução que seja mais rápida? Copie o arquivo DB binário, por exemplo? Qualquer coisa seria melhor do que usar um arquivo de texto como meio de transferência.

Não se trata apenas de transferir os dados para outra máquina para fins de teste. Eu também criar backups diários do banco de dados. Se fosse necessário restaurar o DB, seria muito ruim se o site estivesse fora do ar por 10 horas ...

    
por Andrei Herford 15.08.2018 / 13:51

1 resposta

1

A importação lenta é um sintoma de uma configuração deficiente no servidor de destino.

Aumente o innodb_buffer_pool_size para 70% da RAM disponível. Defina innodb_log_file_size para 512M (usando este procedimento (ajuste url para a versão do servidor mysql)).

Durante a importação, use SET GLOBAL innodb_flush_log_at_trx_commit=0 e volte para 1 após a conclusão da importação.

    
por 19.08.2018 / 05:26