Eu tenho um MySQL InnoDB que possui todos os arquivos de tabela do banco de dados, mas o MySQL não os vê e não os carrega.
O problema aconteceu porque eu apaguei esses três arquivos: ibdata1
, ib_logfile0
eib_logfile1
porque eu estava tendo problemas com o mysql inicializando, e o que li foi para removê-los porque o MySQL apenas os regenerará (eu sei que eu deveria ter feito o backup deles, mas não o fiz).
O que posso fazer para que o MySQL veja as tabelas novamente?
about_member.frm site_stories.frm
about_member.ibd site_stories.ibd
db.opt stories.frm
FTS_00000000000000bb_BEING_DELETED_CACHE.ibd stories.ibd
FTS_00000000000000bb_BEING_DELETED.ibd story_comments.frm
FTS_00000000000000bb_CONFIG.ibd story_comments.ibd
FTS_00000000000000bb_DELETED_CACHE.ibd story_likes.frm
FTS_00000000000000bb_DELETED.ibd story_likes.ibd
FTS_00000000000000f5_BEING_DELETED_CACHE.ibd story_tags.frm
FTS_00000000000000f5_BEING_DELETED.ibd story_tags.ibd
FTS_00000000000000f5_CONFIG.ibd story_views.frm
FTS_00000000000000f5_DELETED_CACHE.ibd story_views.ibd
FTS_00000000000000f5_DELETED.ibd story_view_totals.frm
member_favorites.frm story_view_totals.ibd
member_favorites.ibd tags.frm
members.frm tags.ibd
members.ibd
Respostas:
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
Aqui está uma parte da documentação do MySQL 5.5, explicando o que precisa ser considerado
Dadas essas advertências e protocolos, aqui está um curso de ação sugerido
Neste exemplo, vamos tentar restaurar a
tags
tabela nomydb
banco de dadosPASSO 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 comoCREATE TABLE mydb.tags ...
. Verifique se é exatamente a mesma estrutura que o originaltags.frm
ETAPA 3
Exclua o vazio
tags.ibd
usando o MySQLPASSO 4
Traga a cópia de backup de
tags.ibd
PASSO # 5
Adicionar
tags
tabela ao dicionário de dados do InnoDBPASSO 6
Teste a acessibilidade da tabela
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
Apr 23, 2012
: MySQL: como restaurar a tabela armazenada em um arquivo .frm e .ibd?Sep 28, 2011
: Como recuperar uma tabela do InnoDB cujos arquivos foram movidosEMBARGO
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 aCREATE TABLE
declaração.fonte
weblyize
.tags
' existe. DESCARTE o espaço de tabela antes de IMPORTAR. Então, tento executar o alter tablespace primeiro e recebo este erro: ERRO 1146 (42S02): A tabela 'weblyize.tags' não existe . O que eu posso fazer?CREATE TABLE ...
e siga suas etapas! Você me salvou de ter que reescrevê-los 100% do zero! Não importou chaves estrangeiras, mas tudo bem, eu mesmo posso fazer isso! Mais uma vez obrigado!Eu tenho a mesma situação, não é possível soltar ou criar tblname específico. Meu procedimento de correção é:
Pare o MySQL.
Remova ib_logfile0 e ib_logfile1.
Remova os arquivos tblname. AVISO: ESTE DECLARARÁ SEMPRE SEUS DADOS
Inicie o MySQL.
fonte
Eu tive esse problema também. Apaguei
ibdata1
acidentalmente e todos os meus dados foram perdidos.Após uma pesquisa de um dia no google e no SO, finalmente encontrei uma solução que salvou minha vida (eu tinha tantos bancos de dados e tabelas com registros enormes).
faça um backup de
/var/lib/mysql
recuperar esquema da tabela do
.frm
arquivo com dbsake (havia outra opção! mysqlfrm . mas não funcionou para mim)crie nova tabela (com novo nome) com esquema exportado.
descarte novos dados da tabela com este comando:
/var/lib/mysql/database-name
e, se houver dados (.ibd
arquivo) para a tabela antiga, exclua-a.fonte