processo de restauração do mysql leva mais tempo

2

Eu tenho uma máquina Ubuntu 8.04 que tem cerca de 300 GB de tamanho mysql bancos de dados. Eu tenho despejado todos os bancos de dados usando o comando mysqldump como abaixo.

mysqldump -u root -p --all-databases > file.sql

Agora, na máquina RHEL6, estou tentando restaurar os bancos de dados mysql usando:

mysql -u root -p < file.sql

No entanto, o comando acima parece levar muito tempo e parece ser executado para sempre. Após 3 dias, quando verifico o tamanho do banco de dados restaurado, ele mostra apenas 30 GB como restaurado.

Existe uma maneira eficiente de restaurar o banco de dados?

    
por Ramesh 08.07.2014 / 07:33

1 resposta

2

Antes de postar a resposta, gostaria de repetir que fiz minha pergunta aqui e aqui . Como se pode sugerir, esta questão pertence a dba SE . Mas a razão pela qual eu postei aqui é porque envolve editar o arquivo de configuração em /etc/my.cnf .

Primeira solução

Edite o /etc/my.cnf para incluir os parâmetros abaixo. O local do arquivo de configuração pode variar dependendo da distribuição do Linux. No RHEL6, está presente em /etc/my.cnf .

innodb_doublewrite = 0
innodb_flush_log_at_trx_commit = 0
innodb_support_xa = 0
innodb_locks_unsafe_for_binlog = 1 

Esta sugestão foi fornecida por derobert e gostaria de agradecer-lhe por sugerir esta solução.

Teste : Apesar de não ser tão lento quanto o comando mysql para restauração, esse método ainda levava um tempo considerável. O comando foi executado por 3 dias e restaurou cerca de 130 GB.

Segunda solução

Ao definir alguns sinalizadores antes de importar os despejos de banco de dados, podemos acelerar bastante o processo de restauração:

SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;

Os sinalizadores acima precisam ser definidos no arquivo .sql . Como desativamos a confirmação automática, também precisamos confirmar manualmente no final da restauração:

COMMIT;

A declaração acima deve ser a última declaração do arquivo .sql . Na verdade, podemos encontrar um script para fazer o mysqldump de aqui .

Eu não tive a chance de testar essa solução, mas faz muito sentido, pois desativa as verificações de chave estrangeira.

Como estamos restaurando um banco de dados inteiro, podemos acelerar as coisas desabilitando verificações exclusivas e verificações de chaves estrangeiras. Além disso, ao confirmar tudo no final da restauração, em vez de a restauração estar em andamento, temos aumentos de velocidade adicionais significativos.

Terceira solução

Eu tenho todo o diretório mysql data com backup feito comigo. O diretório de dados normalmente está localizado em /var/lib/mysql . No meu caso, o diretório de dados foi montado como uma partição separada em /mounts/mysql . Eu tinha feito backup da pasta inteira e, portanto, restaurei a pasta inteira para a mais nova máquina RHEL6. Antes de restaurar, precisamos apenas certificar-se de que o daemon mysqld não seja iniciado. Porém, eu restaurei usando o comando rsync , queria ter certeza de que as permissões de arquivo estão definidas atualmente na nova máquina RHEL6. Então, depois de restaurar /mounts/mysql no novo sistema RHEL6, emiti o comando abaixo.

chown -R mysql:mysql /mounts/mysql

Agora, eu testei o banco de dados e tudo parecia perfeitamente legal. O tempo de restauração foi de cerca de 3 horas.

Eu não vi pessoas sugerindo a abordagem acima para a restauração do banco de dados mysql em qualquer lugar. Eu vejo de isso resposta que as versões mysql tem que ser compatível para restaurar os bancos de dados de diretórios de dados. No entanto, com a minha experiência na restauração até agora, isso não é verdade. Contanto que as permissões estejam definidas corretamente, os bancos de dados funcionam perfeitamente bem.

No entanto, precisamos do arquivo .sql quando tentarmos restaurar um banco de dados mysql em um banco de dados sql-server ou um banco de dados postgre .

    
por 08.07.2014 / 07:33