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 ...