Este artículo proporciona una forma comprobada de hacerlo:
Los conceptos básicos de cómo hacer esto no son demasiado difíciles de entender, son los detalles los que se vuelven difíciles. La primera parte de este problema es cómo extraer la definición de la tabla de los archivos .frm. Cubriré la segunda parte del problema en otra publicación. Podría escribir un programa que lea y analice el archivo .frm y genere la definición de la tabla, pero eso es mucho trabajo, especialmente cuando puede engañar a MySQL para que lo haga por usted. Así es como haría esto para el archivo foo.frm.
mysql> CREATE TABLE `test`.`foo` (id int) ENGINE=InnoDB;
Hemos creado una tabla de InnoDB llamada foo. MySQL ha escrito un archivo foo.frm y un archivo foo.ibd en $ datadir / test. También ha hecho un registro de esta tabla en el diccionario de datos.
mysql> FLUSH TABLES;
Esto hace que MySQL cierre todas las tablas abiertas y vacíe el caché de consultas. La idea es obligar a MySQL a olvidarse de la tabla "foo" que acabamos de crear.
bash# cp foo.frm /var/lib/mysql/test;
Simplemente sobrescribimos la definición de tabla para test.foo. Lo hicimos bien, mientras MySQL todavía se estaba ejecutando.
mysql> SHOW CREATE TABLE `test`.`foo`;
Eso generará la definición de tabla para el archivo foo.frm que acabamos de copiar en el directorio de prueba. MySQL probablemente estará un poco confundido, ya que no es probable que la información en el archivo .frm coincida con lo que está en el espacio de tabla del sistema. Probablemente verá un mensaje como este en su registro de errores:
[ERROR] La tabla ./test/foo no tiene una clave principal en el diccionario de datos InnoDB, ¡pero sí una en MySQL! Si creó la tabla con una versión de MySQL <3.23.54 y no definió una clave primaria, pero definió una clave única con todas las columnas no NULL, entonces MySQL trata internamente esa clave como la clave principal. Puede corregir este error volcando + DROP + CREATE + re import de la tabla.
Sin embargo, está bien, solo limpia.
mysql> DROP TABLE `test`.`foo`;
Para evitar la molestia de tener que pasar por esto durante unos cientos de tablas, use el script proporcionado en: artículo de bluegecko . Deberías estar ordenado. Chagbert