Estou tentando converter .frm (arquivos de dados sql) em arquivos de texto. A razão para isso é porque quero ver como o mecanismo sql armazena os dados "nos bastidores", por exemplo: ao usar o armazenamento sql "ENUM" um "INTEIRO" chamado "INDEX", então se alguém conhece um software ou método para converter .frm em .txt, obrigado a todos e tenham um bom dia.
Responder1
Este artigo fornece uma maneira comprovada de fazer isso:
O básico de como fazer isso não é muito difícil de entender, são os detalhes que ficam complicados. A primeira parte deste problema é como extrair a definição da tabela dos arquivos .frm. Abordarei a segunda parte do problema em outro post. Você poderia escrever um programa que leia e analise o arquivo .frm e produza a definição da tabela, mas isso dá muito trabalho - especialmente quando você pode enganar o MySQL para fazer isso por você. Veja como você faria isso para o arquivo foo.frm.
mysql> CREATE TABLE `test`.`foo` (id int) ENGINE=InnoDB;
Criamos uma tabela InnoDB chamada foo. MySQL escreveu um arquivo foo.frm e um arquivo foo.ibd em $datadir/test. Também fez o registro desta tabela no dicionário de dados.
mysql> FLUSH TABLES;
Isso faz com que o MySQL feche todas as tabelas abertas e libere o cache de consultas. A ideia é forçar o MySQL a esquecer a tabela “foo` que acabamos de criar.
bash# cp foo.frm /var/lib/mysql/test;
Acabamos de substituir a definição da tabela para test.foo. Fizemos isso rapidamente, enquanto o MySQL ainda estava em execução.
mysql> SHOW CREATE TABLE `test`.`foo`;
Isso gerará a definição da tabela para o arquivo foo.frm que acabamos de copiar no diretório de teste. O MySQL provavelmente ficará um pouco confuso, pois as informações no arquivo .frm provavelmente não corresponderão ao que está no espaço de tabelas do sistema. Você provavelmente verá uma mensagem como esta em seu log de erros:
[ERRO] A tabela ./test/foo não possui chave primária no dicionário de dados do InnoDB, mas possui uma no MySQL! Se você criou a tabela com uma versão do MySQL <3.23.54 e não definiu uma chave primária, mas definiu uma chave exclusiva com todas as colunas não NULL, então o MySQL tratará internamente essa chave como a chave primária. Você pode corrigir esse erro despejando + DROP + CREATE + importando novamente a tabela.
Tudo bem, apenas limpe.
mysql> DROP TABLE `test`.`foo`;
Para evitar o incômodo de ter que passar por isso em algumas centenas de tabelas, use o script fornecido em:artigo bluegecko. Você deve estar classificado. Chagberto.