Convertendo um arquivo FRM para um SQL

Recentemente fui procurado por um amigo que acidentalmente sobrescreveu alguns arquivos de dados do MySQL que rodava no seu servidor para uma atualização, resultando em problemas no banco de dados.
O MySQL obedece a hierarquia de pastas para armazenamento de dados: <nome do BD>/<nome da tabela>. Dentro destas pastas podem existir 3 tipos de arquivos(usando engines MyISAM e InnoDB): FRM, MYI, MYD. Os arquivos FRM são basicamente a estrutura da tabela, os arquivos MYI são relativos aos indexes da tabela e não existem na engine InnoDB, e os arquivos MYD armazenam os dados ta tabela e também não existem na engine InnoDB.
As tabelas com engine MyISAM não apresentaram problemas, uma vez que foram inseridas na pasta de dados do MySQL, já foram importadas. Porém com a engine InnoDB as coisas não foram tão simples assim, uma vez que o mesmo precisa de informações contidas no arquivo ibdata1 e que foi sobrescrevido pelo meu amigo durante a atualização, logo, os dados já eram. Por sorte, ele só precisava da estrutura do banco e só tinha os arquivos FRM do mesmo (seu banco era InnoDB!).
Eu conseguia abrir os arquivos no notepad++ e via os nomes dos campos das tabelas(sem definições de tipo, tamanho, etc) e aqueles caracteres estranhos, comuns em arquivos binários, já era alguma coisa mas eu queria toda a estrutura.
Encontrei alguns métodos para fazer isso, o que achei mais fácil de se executar foi através do pacote de utilitários do MySQL.
Dentro do utilitários existe uma série de programas que ajudam na manutenção dos servidores MySQL, entre eles existe o mysqlfrm. O utilitário mysqlfrm é uma ferramenta de recuperação que lê o <arquivo.frm> e gera as declarações de criação da tabela a partir dos dados encontradas no arquivo.
Eu usei o comando abaixo para recuperar as tabelas:
mysqlfrm --server=<usuario do banco>:<senha do banco>@localhost --user=mysql <endereço do arquivo .frm> --port=<porta>
Tive problemas com a porta usada que continuava aberta após o termino da conversão, mas substitui o valor da mesma por outro número e consegui gerar todos os SQLs das tabelas.
Não me aprofundei muitos nas ferramentas mas creio que vale muito a pena.
Até a próxima!
Voltar