MyISAM
Para uma tabela MyISAM mydb.mytable, você deve ter três arquivos
\bin\mysql\mysql5.6.12\data\mydb\mytable.frm
\bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
\bin\mysql\mysql5.6.12\data\mydb\mytable.MYI
Eles já devem estar acessíveis como uma tabela, pois cada arquivo contém dados, metadados e informações de índice necessários. Coletivamente, eles formam a mesa. Não há mecanismos de mecanismo de armazenamento externo para acessar.
InnoDB
Dê uma olhada nesta Representação pictórica do InnoDB
A única coisa que anexa ibdata1 aos .ibd
arquivos é o dicionário de dados.
Sua missão, caso você decida aceitá-la, é criar cada tabela e trocar as .ibd
Antes de fazer qualquer coisa, faça uma cópia completa de "\ bin \ mysql \ mysql5.6.12 \ data" para outra
Aqui está uma amostra
Suponha que você tenha um banco de dados mydb
com a tabela mytable
. Isso significa
- Você tem a pasta
\bin\mysql\mysql5.6.12\data\mydb
- Dentro dessa pasta, você tem
Você precisa do .frm
. Se você olhar para o meu post Como extrair o esquema da tabela apenas do arquivo .frm? , você pode baixar um utilitário MySQL que pode gerar o SQL necessário para criar a tabela.
Agora você deve fazer o seguinte
- Mover
mytable.ibd
para\bin\mysql\mysql5.6.12\data
- Execute o SQL para criar a tabela InnoDB
- Entre no mysql e execute
ALTER TABLE mydb.mytable DISCARD TABLESPACE;
(Isso será excluído \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
)
- Copiar
\bin\mysql\mysql5.6.12\data\mytable.ibd
para\bin\mysql\mysql5.6.12\data\mydb
- Entre no mysql e execute
ALTER TABLE mydb.mytable IMPORT TABLESPACE;
(Isso será registrado \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
no dicionário de dados)
Depois disso, a tabela mydb.mytable
deve estar totalmente acessível. Você pode testar essa acessibilidade simplesmente executando:
SELECT * FROM mydb.mytable LIMIT 10;
De uma chance !!!
BEBIDA (Recuperação de Dados Incorpora o Conhecimento Necessário)
information_schema.key_column_usage
(provavelmente também outras tabelas) não retornará dados na primeira,select
portanto você deverá executar pelo menos uma consulta e aguardar alguns segundos antes que a próxima consulta possa funcionar. (mysql Ver 14.14 Distrib 5.7.19, para linux-glibc2.12 (x86_64) usando o wrapper EditLine))