Recuperação de dados MySQL (innoDB) - faltando arquivos .frm mas ibdata intacta

4

Um fiasco recente do servidor me deixou com um arquivo ibdata intacto aparentemente único, mas apenas metade dos meus diretórios contendo .frm. Eu copiei tudo isso para uma nova instalação do mysql e recuperei com sucesso os bancos de dados para os quais eu ainda tinha arquivos .frm. Minha pergunta é - é possível regenerar os arquivos .frm do arquivo ibdata de alguma forma? Ou, de alguma forma, modificar os arquivos .frm da versão de desenvolvimento do mesmo banco de dados, de forma que eles possam ser usados para recuperação?

Restaurar a partir do backup, infelizmente, não é uma opção viável.

Editado para esclarecer: Eu tentei recuperar os bancos de dados usando arquivos .frm gerados localmente contendo o mesmo esquema - sem dados, mesmo em innodb_force_recovery = 1.

    
por bhaibel 10.08.2010 / 20:33

1 resposta

2

Eu nunca fiz isso, mas sua pergunta está relacionada às ferramentas que eu uso, então fiquei curioso! Parece que isso é realmente possível, aqui está um exemplo:

link

Sometime you may need to recover a table when all you have is the .ibd file. In this case, if you try to load it into a new instance, your likely to encounter some errors about the table id not matching. And there is not really a way around this.

However, I’ve found two work-arounds for this:

Note: You will need the .ibd file and the CREATE TABLE statement for each table you want to recover using these methods.

  • Simulate the internal InnoDB table counter. That is, create work tables (with innodb_file_per_table enabled) until you have the internal pointer of table id equal to (1 – id_of_ibd_table_you_need_to_restore). (See Method #1)
  • Manually hex edit the .ibd file, changing the table id. (See Method #2)

Os passos em si são de várias páginas, por isso não os colei aqui.

Outra postagem relacionada: link

Eu ficarei curioso em saber se isso funciona, parece que várias pessoas o utilizaram com sucesso.

    
por 24.08.2011 / 08:31