Este artigo fornece uma maneira comprovada de fazer isso:
Os conceitos básicos de como fazer isso não são muito difíceis de entender, são os detalhes que são complicados. A primeira parte desse problema é como extrair a definição de tabela dos arquivos .frm. Eu cobrirei a segunda parte do problema em outro post. Você poderia escrever um programa que lê e analisa o arquivo .frm e gera a definição da tabela, mas isso é muito trabalhoso - especialmente quando você pode fazer com que o MySQL faça isso para você. Aqui está como você faria isso para o arquivo foo.frm.
mysql> CREATE TABLE 'test'.'foo' (id int) ENGINE=InnoDB;
Criamos uma tabela InnoDB chamada foo. O MySQL escreveu um foo.frm e um arquivo foo.ibd em $ datadir / test. Também fez um registro dessa 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 idéia é 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. Nós fizemos isso quente, enquanto o MySQL ainda estava rodando.
mysql> SHOW CREATE TABLE 'test'.'foo';
Isso mostrará 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, já que 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 essa em seu log de erros:
[ERROR] Table ./test/foo has no primary key in InnoDB data dictionary, but has one in MySQL! If you created the table with a MySQL version < 3.23.54 and did not define a primary key, but defined a unique key with all non-NULL columns, then MySQL internally treats that key as the primary key. You can fix this error by dump + DROP + CREATE + re import of the table.
Tudo bem, limpe.
mysql> DROP TABLE 'test'.'foo';
Para evitar o incômodo de ter que passar por algumas centenas de tabelas, use o script fornecido em: artigo do bluegecko . Você deveria ser classificado. Chagbert.