Estou restaurando um banco de dados de 30 GB de um arquivo mysqldump para um banco de dados vazio em um novo servidor. Ao executar o SQL a partir do arquivo de despejo, a restauração é iniciada muito rapidamente e começa a ficar cada vez mais lenta. Agora, as inserções individuais estão demorando mais de 15 segundos. As tabelas são principalmente MyISAM com um pequeno InnoDB. O servidor não possui outras conexões ativas. SHOW PROCESSLIST;
mostra apenas a inserção da restauração (e a própria lista de processos da mostra).
Alguém tem alguma idéia do que poderia estar causando a desaceleração dramática?
Existem variáveis do MySQL que posso alterar para acelerar a restauração enquanto ela está progredindo?
Respostas:
Uma coisa que pode estar retardando o processo é o key_buffer_size , que é o tamanho do buffer usado para blocos de índice. Ajuste isso para pelo menos 30% da sua RAM ou o processo de re-indexação provavelmente será muito lento.
Para referência, se você estivesse usando o InnoDB e chaves estrangeiras, também poderia desativar as verificações de chave estrangeira e reativá-la no final (usando
SET FOREIGN_KEY_CHECKS=0
eSET FOREIGN_KEY_CHECKS=1
).fonte
Este link mostra o que se pode fazer para acelerar o processo de restauração.
http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html
Pode-se colocar os comandos no topo do arquivo de despejo
E coloque essas instruções no final do arquivo de despejo
Isso funcionou para mim. Restauração feliz :-)
fonte
cat pre.sql dump.sql post.sql | mysql ...
A única razão pela qual posso imaginar por que a restauração diminuiria gradualmente é a indexação. Investigue a desativação da indexação até o final e deixe fazer todo o lote de uma só vez.
fonte
Se você tiver a cópia física do arquivo de despejo (o diretório DB), poderá copiá-lo para o novo servidor se o novo servidor tiver a mesma versão do MySQL e funcionar corretamente. Isso funciona bem com o MyISAM e, para mim, acho melhor do que restaurar os dados com base no arquivo lógico de despejo SQL.
fonte
se você tiver várias tabelas, é provável que você se beneficie do mk-parallel-restore .
fonte
Isso fará:
mysql --init-command = "SET SESSION FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;" -u raiz -p <Backup_Database.mysql
fonte
Eu sugeri você,
AUTOCOMMIT=0
,UNIQUE_CHECKS=0
,FOREIGN_KEY_CHECKS=0
( e não se esqueça de reverter isso muda )mysql -u root -pPasss requests < mydb.sql
Boa sorte
fonte