Convierte .frm (archivos de datos SQL) en archivos de texto

0

Estoy tratando de convertir .frm (archivos de datos sql) a archivos de texto, la resonancia de esto es porque quiero ver cómo el motor sql almacena los datos "detrás de escena", por ejemplo: cuando se usa el almacenamiento sql "ENUM" un "INTEGER" llamado "INDEX", así que si alguien conoce un software o método para convertir el .frm a .txt, gracias a todos y que tengan un buen día.

Aviel Fedida
fuente

Respuestas:

1

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

Chagbert
fuente