Recentemente, tive que importar um arquivo dump MySQL de 7 Gb para um servidor MySQL 5.6. A importação levou cerca de 7 horas em uma CPU mono-core com 1 Gb de RAM.
Outra pessoa testou a importação em um servidor MySQL que possui, entre outras, as seguintes configurações:
innodb_buffer_pool_size = 8G
query_cache_size = 300M
Estou um pouco cético sobre a relevância dessas configurações (e sim, até acho que definir um cache de consulta tão grande é ruim ). Faria diferença? Essas configurações não são usadas apenas ao consultar o banco de dados e, portanto, irrelevantes para uma importação?
Se sim, quais configurações devem ser definidas para acelerar a importação de um grande arquivo dump?
De acordo com a documentação oficial, esses valores devem ser definidos temporariamente:
unique_checks = 0
foreign_key_checks = 0
Eu li aqui que deve ser definido também
innodb_flush_log_at_trx_commit = 2
mas não acho que ajudaria, porque o modo de confirmação automática (liberação de logs no disco para cada inserção) já está desabilitado por padrão no comando mysqldump ( --opt
opção).
SUGESTÃO #1
Não há necessidade de correr
unique_checks = 0
eforeign_key_checks = 0
. Veja meu post de 3 anos atrás Acelerando mysqldump / recarregamento (ASPECT #2 mostra um cabeçalho padrão de um mysqldump. As linhas 13 e 14 lidam com a desativação dessas verificações para você)SUGESTÃO #2
Por favor, observe a arquitetura InnoDB (imagem de Percona CTO Vadim Tkachenko)
Se você quiser recarregar uma instância do MySQL, você deve desabilitar temporariamente o Double Write Buffer.
PASSO 1
Faça login no servidor de destino e execute
PASSO 2
Reinicie o mysqld definindo innodb_doublewrite como OFF
ETAPA 3
Carregue o mysqldump no servidor de destino
PASSO 4
Reinicie o mysqld normalmente (o buffer de gravação dupla será ativado novamente)
Como o nome "Double Write Buffer" implica duas gravações, o InnoDB apenas gravará dados e índices diretamente nos arquivos da tabela e ignorará a gravação no Double Write Buffer dentro do arquivo
ibdata1
. Talvez isso dobre o tempo de importação (trocadilho intencional)SUGESTÃO #3
O innodb_log_buffer_size padrão é 8M . Você precisa de um buffer de log maior.
Adicione esta linha a my.cnf no
[mysqld]
cabeçalho do grupoEm seguida, reinicie o mysqld antes de recarregar o mysqldump.
DE UMA CHANCE !!!