O MySQL se recusa a iniciar e eu só consegui iniciar em modo somente leitura usando innodb_force_recovery = 6
. Todas as respostas que encontrei sobre esse tópico sugerem fazer um backup, deletar ibdata e ib_logfiles e então deixá-los serem recriados:
- https://serverfault.com/questions/592793/mysql-crashed-and-wont-start-up
- innodb_force_recovery quando corrupção do InnoDB
- https://stackoverflow.com/questions/41997197/mysql-data-recovery-with-innodb
No meu caso, como innodb-file-per-table está habilitado, estou pensando se também preciso excluir arquivos como /var/lib/mysql/MY_DATABASE/table.ibd?
este. Além disso, como o registro de refazer está desabilitado, não há nenhum arquivo de log para remover.
O erro específico que recebi foi este:
[InnoDB] O servidor foi encerrado quando o redo logging do InnoDB foi desabilitado. Os arquivos de dados podem estar corrompidos. Você pode tentar reiniciar o banco de dados com innodb_force_recovery=6
Neste ponto, consegui iniciar no modo somente leitura e fiz um backup de todas as tabelas que preciso. O que especificamente devo excluir? Ou há uma abordagem melhor para reconstruir completamente essas tabelas?
Estou pensando em simplesmente desinstalar o MySQL completamente e limpar o diretório inteiro, mas estou esperando feedback aqui se houver uma abordagem mais simples.
A única maneira segura de usar o método de despejo e recriação para restaurar tabelas InnoDB corrompidas é recriar todas as tabelas InnoDB.
Mesmo se você usar
innodb_file_per_table
, oibdata1
arquivo potencialmente contém parte de qualquer tabela InnoDB, porque ele pode conter partes do buffer de alteração . Então, se você remover oibdata1
, você pode (e provavelmente irá) corromper outras tabelas InnoDB.Não tenho certeza se desabilitar o redo log levou à corrupção da sua tabela, mas com base no erro que você mostra, deduzo que sim. Não desabilite o redo log e então mate seu MySQL Server.
O manual diz:
Supondo que você estivesse seguindo esse conselho, você estava no processo de carregar dados iniciais para sua nova instância de banco de dados, então você já deve ter um backup completo. Nesse caso, a coisa mais limpa a fazer seria remover tudo no datadir e começar de novo inicializando, e então recarregar todo o backup.
Então, antes de atualizar quaisquer dados, você deve reativar imediatamente o log de refazer.