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

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

Estoy intentando convertir .frm (archivos de datos SQL) en archivos de texto. La razón de esto es porque quiero ver cómo el motor SQL almacena los datos "entre bastidores". Por ejemplo: cuando se utiliza el almacenamiento SQL "ENUM". un "ENTERO" llamado "ÍNDICE". Entonces, si alguien conoce un software o método para convertir .frm a .txt, gracias a todos y que tenga un buen día.

Respuesta1

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 complicados. 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ías 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 puedes engañar a MySQL para que lo haga por ti. Así es como harías esto para el archivo foo.frm.

mysql> CREATE TABLE `test`.`foo` (id int) ENGINE=InnoDB;

Hemos creado una tabla InnoDB llamada foo. MySQL ha escrito un archivo foo.frm y foo.ibd en $datadir/test. También ha realizado 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 la tabla para test.foo. Lo hicimos en caliente, mientras MySQL todavía estaba ejecutándose.

mysql> SHOW CREATE TABLE `test`.`foo`;

Eso generará la definición de la tabla para el archivo foo.frm que acabamos de copiar en el directorio de prueba. MySQL probablemente estará un poco confundido, ya que es poco probable que la información en el archivo .frm coincida con la que hay 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 clave principal en el diccionario de datos InnoDB, ¡pero tiene una en MySQL! Si creó la tabla con una versión de MySQL <3.23.54 y no definió una clave principal, pero definió una clave única con todas las columnas que no sean NULL, entonces MySQL trata internamente esa clave como la clave principal. Puede corregir este error volcando + DROP + CREAR + volviendo a importar la tabla.

Pero está bien, sólo limpia.

mysql> DROP TABLE `test`.`foo`;

Para evitar la molestia de tener que pasar por esto durante unos cientos de tablas, utilice el script proporcionado en:artículo sobre bluegecko. Deberías estar ordenado. Chagbert.

información relacionada