MyISAM
Para una tabla MyISAM mydb.mytable, debe tener tres archivos
\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
Ya deberían estar accesibles como una tabla, ya que cada archivo contiene datos, metadatos e información de índice necesarios. Colectivamente, forman la mesa. No hay mecanismos de motor de almacenamiento externo para acceder.
InnoDB
Echa un vistazo a esta representación pictórica de InnoDB
Lo único que une ibdata1 a los .ibd
archivos es el diccionario de datos.
Su misión, si decide aceptarla, es crear cada tabla e intercambiar .ibd
Antes de hacer nada, haga una copia completa de "\ bin \ mysql \ mysql5.6.12 \ data" en otra
Aquí hay una muestra
Supongamos que tiene una base de datos mydb
con la tabla mytable
. Esto significa
- Tienes la carpeta
\bin\mysql\mysql5.6.12\data\mydb
- Dentro de esa carpeta, tienes
Necesitas el .frm
. Si miras mi publicación ¿Cómo puedo extraer el esquema de la tabla solo del archivo .frm? , puede descargar una utilidad MySQL que puede generar el SQL necesario para crear la tabla.
Ahora deberías hacer lo siguiente
- Mover
mytable.ibd
a\bin\mysql\mysql5.6.12\data
- Ejecute el SQL para crear la tabla InnoDB
- Inicie sesión en mysql y ejecute
ALTER TABLE mydb.mytable DISCARD TABLESPACE;
(Esto eliminará \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
)
- Copiar
\bin\mysql\mysql5.6.12\data\mytable.ibd
en\bin\mysql\mysql5.6.12\data\mydb
- Inicie sesión en mysql y ejecute
ALTER TABLE mydb.mytable IMPORT TABLESPACE;
(Esto se registrará \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd
en el diccionario de datos)
Después de esto, la mesa mydb.mytable
debería ser completamente accesible. Puede probar esa accesibilidad simplemente ejecutando:
SELECT * FROM mydb.mytable LIMIT 10;
Darle una oportunidad !!!
BEBIDA (la recuperación de datos incorpora el conocimiento necesario) responsablemente
information_schema.key_column_usage
tablas (probablemente también otras tablas) no devolverá datos sobre el primero,select
por lo que debe ejecutar al menos una consulta y esperar unos segundos antes de que la próxima consulta pueda funcionar. (mysql Ver 14.14 Distrib 5.7.19, para linux-glibc2.12 (x86_64) usando el envoltorio EditLine)