Como posso acelerar uma restauração do MySQL de um arquivo de despejo?

25

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, em seguida, começa a ficar mais lenta e lenta. Insertos individuais agora levam 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).

Alguém tem alguma idéia do que poderia estar causando a desaceleração dramática?

Existe alguma variável do MySQL que eu possa alterar para acelerar a restauração enquanto ela está progredindo?

    
por Dave Forgac 29.05.2010 / 17:37

6 respostas

24

Uma coisa que pode estar atrasando o processo é o key_buffer_size , que é o tamanho do buffer usado para blocos de índice. Ajustar isso para pelo menos 30% da sua memória RAM ou o processo de re-indexação provavelmente será muito lento.

Para referência, se você estivesse usando InnoDB e chaves estrangeiras, você também poderia desabilitar as checagens de chaves estrangeiras e reativá-las no final (usando SET FOREIGN_KEY_CHECKS=0 e SET FOREIGN_KEY_CHECKS=1 ).

    
por 29.05.2010 / 18:00
20

Este link mostra o que se pode fazer para acelerar o processo de restauração.

link

Pode-se colocar os comandos no topo do arquivo de despejo

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

E coloque essas declarações no final do arquivo de despejo

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;
COMMIT;

Isso funcionou para mim. Feliz restaurando: -)

    
por 20.01.2014 / 07:14
1

A única razão pela qual eu posso imaginar porque a restauração diminuiria gradualmente é a indexação. Investigue a desativação da indexação até o final e deixe que ela faça todo o lote de uma só vez.

    
por 29.05.2010 / 23:23
1

Se você tiver a cópia física do arquivo de despejo (o diretório do banco de dados), basta copiá-lo para o novo servidor se o novo servidor tiver a mesma versão do MySQL e funcionará bem. 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.

    
por 16.06.2010 / 13:08
0

Se você tiver várias tabelas, é provável que você se beneficie com mk-parallel-restore .

    
por 29.05.2010 / 20:24
-1

Eu sugeri você,

  1. Verifique suas tabelas: isso tem gatilhos? Limpar todos os acionadores
  2. SET: AUTOCOMMIT=0 , UNIQUE_CHECKS=0 , FOREIGN_KEY_CHECKS=0 ( E NÃO SE ESQUEÇA DE REVERTER ESTE MUDANÇAS )
  3. USE LINHA DE COMANDO COMO mysql -u root -pPasss requests < mydb.sql
  4. Verifique o tamanho do seu arquivo de banco de dados

Boa sorte

    
por 26.07.2015 / 23:56