O que eu tive que fazer foi recriar o arquivo IBDATA1. Infelizmente, durante a execução do daemon detecta os bancos de dados (os diretórios), ele não pega as tabelas Innodb dentro (os arquivos IBD / FRM). Então o que eu fiz foi:
- Esvazie o diretório de dados (ou mova o original e crie um diretório vazio)
- Execute o daemon, deixe-o criar um novo arquivo IBDATA1 vazio
- Importe as tabelas do sistema usando os scripts SQL em
…\MySQL\share
- Crie um banco de dados e uma tabela fictícios com o mesmo nome
- Copiar sobre o arquivo FRM original
- Use
DESCRIBE
ou melhor,SHOW TABLE CREATE
para extrair a estrutura da tabela - Em seguida, usei
DISCARD TABLESPACE
na tabela - copiado sobre o arquivo IBD original
- Então eu usei
IMPORT TABLESPACE
- Finalmente, eu corri o daemon com
innodb-force-recovery=6
- E eu corri
mysqldump
para extrair as estruturas e dados
Claro que nem sempre foi bom. Algumas tabelas estavam bem, mas algumas exigiam eliminar a tabela e o banco de dados após o SHOW TABLE CREATE
e usar isso para recriar a tabela antes de tentar importar os dados. Outros nem sequer funcionaram tão longe, e eu tive que manualmente obter os comentários e nomes das colunas do arquivo FRM usando um editor hexadecimal (embora descobrir quais eram os tipos de dados e atributos, chaves, etc., era uma porcaria. tiro). Além disso, houve muitos - muitos - daemon e reinicializações de clientes.
(Eu ainda estou procurando por uma ferramenta que analise diretamente os arquivos FRM / IBD (ou pelo menos exiba a estrutura da tabela a partir de um arquivo FRM), mas parece que ninguém se incomodou em “fazer engenharia reversa” deles mesmo que seja O código-fonte aberto e os formatos de arquivos estão disponíveis publicamente.Parece que todos são complacentes usando as ferramentas oficiais do MySQL - criando assim uma grande oportunidade para empresas de recuperação de dados e ferramentas proprietárias / comerciais.)
A chave era sempre trabalhar com o mínimo absoluto (por exemplo, apenas o diretório MYSQL - ou seja, tabelas do sistema). Infelizmente, enquanto isso significava que as coisas seriam simplificadas e mais fáceis de trabalhar, isso também significava recuperar uma tabela de cada vez - o que não era grande coisa para mim, mas para algumas pessoas poderia ser.
De qualquer forma, dentre as muitas páginas de recuperação do MySQL na Internet que vi nos últimos dias, um pequeno punhado foi bastante útil, e vou adicioná-las assim que eu vasculhar meu histórico para desenterrá-las.
Espero que isso possa ajudar os outros em uma situação semelhante.