Aqui está o porquê o MySQL não pode ver esses arquivos: O espaço de tabela do sistema (ibdata1) possui um dicionário de dados específico do Storage-Engine que permite ao InnoDB mapear o uso potencial da tabela:
Mover tabelas do InnoDB de um lugar para outro requer comandos como
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
Aqui está uma parte da documentação do MySQL 5.5, explicando o que precisa ser considerado
Considerações sobre portabilidade para arquivos .ibd
Você não pode mover livremente os arquivos .ibd entre os diretórios do banco de dados, como é possível com os arquivos de tabela MyISAM. A definição de tabela armazenada no espaço de tabela compartilhado do InnoDB inclui o nome do banco de dados. Os IDs da transação e os números de sequência do log armazenados nos arquivos do espaço de tabela também diferem entre os bancos de dados.
Para mover um arquivo .ibd e a tabela associada de um banco de dados para outro, use uma instrução RENAME TABLE:
TABELA DE RENOMEAÇÃO db1.tbl_name TO db2.tbl_name; Se você tiver um backup "limpo" de um arquivo .ibd, poderá restaurá-lo para a instalação do MySQL da qual se originou da seguinte maneira:
A tabela não deve ter sido descartada ou truncada desde que você copiou o arquivo .ibd, pois isso altera o ID da tabela armazenada dentro do espaço de tabela.
Emita esta instrução ALTER TABLE para excluir o arquivo .ibd atual:
ALTER TABLE nome_tabela DISCARD TABLESPACE; Copie o arquivo .ibd de backup no diretório de banco de dados apropriado.
Emita esta instrução ALTER TABLE para informar ao InnoDB para usar o novo arquivo .ibd da tabela:
ALTER TABLE nome_tabela IMPORT TABLESPACE; Nesse contexto, um backup de arquivo .ibd “limpo” é aquele para o qual os seguintes requisitos são atendidos:
Não há modificações não confirmadas por transações no arquivo .ibd.
Não há entradas de buffer de inserção não imersas no arquivo .ibd.
A remoção removeu todos os registros de índice marcados com exclusão do arquivo .ibd.
O mysqld liberou todas as páginas modificadas do arquivo .ibd do buffer pool para o arquivo.
Dadas essas advertências e protocolos, aqui está um curso de ação sugerido
Neste exemplo, vamos tentar restaurar a tags
tabela no mydb
banco de dados
PASSO 1
Verifique se você tem backups daqueles .frm
e .ibd
arquivos/tmp/innodb_data
PASSO 2
Obtenha a CREATE TABLE tags
instrução e execute-a como CREATE TABLE mydb.tags ...
. Verifique se é exatamente a mesma estrutura que o originaltags.frm
ETAPA 3
Exclua o vazio tags.ibd
usando o MySQL
ALTER TABLE mydb.tags DISCARD TABLESPACE;
PASSO 4
Traga a cópia de backup de tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
PASSO # 5
Adicionar tags
tabela ao dicionário de dados do InnoDB
ALTER TABLE mydb.tags IMPORT TABLESPACE;
PASSO 6
Teste a acessibilidade da tabela
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
Se você obtiver resultados normais, parabéns por importar uma tabela do InnoDB.
PASSO 7
No futuro, não exclua ibdata1 e seus logs
De uma chance !!!
Eu já discuti coisas assim antes
EMBARGO
E se você não conhece a estrutura da tabela do tags
?
Existem ferramentas para obter a instrução CREATE TABLE apenas usando o .frm
arquivo Também escrevi um post sobre isso: como extrair o esquema da tabela apenas do arquivo .frm? . Nesse post, copiei um arquivo .frm para uma máquina Windows a partir de uma caixa Linux, executei a ferramenta Windows e obtive a CREATE TABLE
declaração.