Devo interromper o reparo do MySQL?

3

O banco de dados MySQL (20 Gigabytes de tabelas e índice) foi corrompido. Eu lancei a opção de reparo usando a interface gráfica do MySQL-admin, agora ela está funcionando há 24 horas. Quando eu verifico as opções do MyISAM (buffers, threads, etc.) eu percebi que eles são extremamente baixo desempenho: 1 thread de reparo, 8 Mb de buffer de classificação ...

Minha pergunta é: o melhor é parar o processo de reparo e iniciar novamente com uma configuração melhor ou mantê-lo em execução e aguardar. Existe alguma maneira de saber o que está fazendo o processo de reparo ou quanto vai demorar?

    
por 3 revs, 2 users 67%anon 28.08.2012 / 12:43

6 respostas

6

Você pode acompanhar o andamento do reparo observando o conteúdo do seu diretório de dados; você verá tabelas com nomes começando com # que são usados durante o reparo.

Você também pode verificar SHOW PROCESSLIST para se certificar de que não está fazendo um "Repair with keycache" porque isso é muito pior do que "Repair by sorting"

O reparo é muito lento em tabelas grandes; você provavelmente deve evitar tabelas muito grandes, especialmente com muitos índices, com o MyISAM. Prefira particioná-los para reduzir os tempos de reparo. Isso pode exigir uma alteração importante no código do aplicativo.

    
por 01.07.2009 / 12:05
4

Basicamente, houve um blecaute e o banco de dados foi corrompido.

Eu não paro o processo de reparo, mas parece demorar um pouco. Espero que seja corretamente restaurado. De qualquer forma, segui algumas indicações para o futuro:

1.- Adicione ao arquivo my.conf o seguinte

[mysqld]
myisam-recover=backup,force 

Com isso, o mysql forçará uma recuperação toda vez que o motor myisam for corrompido.

2.- Aumente o número de encadeamentos para conserto, e o tamanho do buffer de ordenação.

3.- Não use a interface gráfica mysql-admin, use a linha de comando. Basicamente porque a linha de comando mysqlcheck tem uma opção detalhada.

E, claro, fazer backup: -)

    
por 01.07.2009 / 15:17
3

Recomendaria enfaticamente NÃO interromper o processo.

O 1 tópico que você vê na lista de processos é o modo como o MySQL funciona e você pode danificar o banco de dados existente se você parar no meio.

Talvez você possa fornecer mais informações sobre o que aconteceu com seu banco de dados para ficar corrompido?

    
por 01.07.2009 / 13:50
1

Hmm ... como entrada para dez, você pode confirmar que o reparo está sendo executado ativamente executando "show processlist;" a partir de um prompt do MySQL.

(Provavelmente não é a resposta que você estava procurando, mas esperamos que seja um passo ao longo do caminho.)

[Ah - derrotado por MarkR.]

    
por 01.07.2009 / 12:07
1

Meu reparo estava demorando porque o disco estava cheio de arquivos temporários. Eu não percebi. Meu arquivo servername.err no diretório mysql continha linhas como essa ....

101104 5:43:24 [ERRO] / usr / sbin / mysqld: O disco está escrito "/ tmp / STiktcbP" (Errcode: 28). Esperando alguém liberar espaço ... Tente novamente em 60 segundos

    
por 04.11.2010 / 06:36
0

verifique o limite de tempo do seu php.ini, é muito provável que o script tenha parado de funcionar depois de 300 segundos! (você também pode fazer phpinfo () e verificar a saída)

você deve fazer reparos em um DB tão grande somente através da interface mysql da linha de comando.

    
por 01.07.2009 / 10:30