Então eu fiz um mysqldump
banco de dados bem grande e estou tentando restaurá-lo agora usando:
mysql db_test < db_test.sql
mas parece que não vai acabar até o final deste ano. Já faz cerca de uma hora e ainda está "restaurando". Fazer o backup levou cerca de 10 minutos, então temo que algo ruim esteja acontecendo.
Até aqui:
- Eu verifiquei que
mysqld
está consumindo minha CPU (até 80% às vezes). - Não há nada relevante a ele nos logs.
Eu posso ver o banco de dados criado e preenchido com uma tonelada de tabelas (mas não tudo). Além disso, quando executo
use db_test;
, recebo a seguinte mensagem:Lendo as informações da tabela para completar os nomes das tabelas e colunas Você pode desativar esse recurso para obter uma inicialização mais rápida com -A
- Arquivos db originais onde cerca de 25 GB, após toda a hora,
df -h
retornam o mesmo espaço livre de antes. Então eu acho que não está fazendo nada no disco.
Algo estranho aqui é que, ao verificar top
, descobri que kworker
estava consumindo até 100% da cpu às vezes, o que não deveria estar acontecendo
Alguma ideia ou qualquer coisa que eu possa fazer para ver o que está acontecendo?
Parece que os discos subjacentes estão ocupados. O problema em restaurar um banco de dados grande é que cada (grupo de) INSERT requer uma operação de descarga/sincronização, que é muito lenta em discos mecânicos (um disco de 7200 RPM está na ordem de ~100 IOPS).
Para acelerar a restauração, você teve que instruir temporariamente o MySQL/MariaDB para não emitir liberações/sincronizações. Para fazer isso, interrompa a restauração e edite o seu
/etc/my.ini
com as duas linhas a seguir:innodb_flush_method=nosync
innodb_flush_log_at_trx_commit=2
Em seguida, reinicie o MariaDB e repita a restauração. As coisas devem ir muito mais rápido agora.
Após a restauração, REMOVA AS LINHAS ACIMA ou seu banco de dados terá uma vida curta e ruim: liberações/sincronizações existem por motivos muito importantes. Embora seja aceitável desativá-los para uma restauração, um banco de dados de produção nunca deve ser executado sem eles.
Se o seu armazenamento subjacente for discos antigos simples, para um banco de dados MySQL de 25 GB em disco, é normal experimentar uma restauração de horas - especialmente para alguns bancos de dados mal estruturados (muitas tuplas, índices, etc.).
Para começar, comprima seu dump, isso economiza toneladas de E/S e coloca menos estresse na memória cache:
No seu caso, como você já fez o mysqldump:
Além do desempenho do sistema (armazenamento, RAM, etc.), as configurações do MySQL podem ter um grande impacto. Mas isso é toda uma experiência lá, nada do que pode ser tratado por meio de um problema de ServerFault ...