¿Cómo puede extraer el esquema de la tabla solo del archivo .frm?

8

Extraje el directorio de datos de mysql de una copia de seguridad y necesito obtener el esquema de una tabla antigua, sin embargo, es una copia de seguridad de una máquina diferente.

Hoy he leído un buen número de tutoriales sobre cómo hacer esto, pero cada vez que parece fallar o tengo que reinstalar mysql porque mysql se cuelga o falla. He probado lo siguiente:

  • Crea una base de datos diferente
  • Crear tabla con el mismo nombre en esa base de datos
  • Reemplazar el archivo
  • Parar / Arrancar el motor
  • Recuperarse del .frmarchivo

Lo he intentado en varias órdenes y combinaciones.

¿Existe alguna herramienta externa que pueda extraer el esquema del .frmarchivo? Puedo ver los nombres de las columnas si abro el archivo. Eché un vistazo, pero parece que no puedo encontrar nada que me permita hacer esto.

Gracias por adelantado.

Relequestual
fuente

Respuestas:

8

En TwinDB creamos una interfaz web para mysqlfrm. Es gratis y fácil de usar.

Para recuperar la estructura de la tabla, solo necesita cargar el archivo .frm.

Aquí hay pasos. 1. Abra https://recovery.twindb.com/ . Haga clic en "Recuperar estructura" ingrese la descripción de la imagen aquí

  1. En el siguiente submenú, haga clic en "desde el archivo .frm" ingrese la descripción de la imagen aquí

  2. En la siguiente vista, haga clic en "Examinar" y seleccione un archivo .frm en un disco local. Haga clic en "Subir" ingrese la descripción de la imagen aquí

  3. Espera hasta que haga la magia ingrese la descripción de la imagen aquí

  4. Consigue la estructura recuperada. ingrese la descripción de la imagen aquí

También es posible cargar un archivo con un montón de archivos .frm. El sitio los recuperará por completo.

akuzminsky
fuente
2
El sitio ya no funciona.
Anbuselvan Rocky
@AnbuselvanRocky Descargar mysqlfrm(descargué la versión 1.6.5) y ejecutar estomysqlfrm --diagnostic /path/to/my_table.frm
MyTitle
5

He respondido preguntas como esta antes

Me he referido a un blog de Chris Calendar sobre la conexión de .ibdarchivos al diccionario de datos.

Si no tiene el .ibdjunto con .frm, es probable que MySQL se esté ejecutando con innodb_file_per_table apagado. Por favor, consulte la Feb 03, 2012publicación sobre eso. Si esto es Linux, asegúrese de ejecutar

cd /var/lib/mysql
chown -R mysql:mysql *

antes de comenzar mysql.

Darle una oportunidad !!!

INFORMACIÓN COMPLEMENTARIA

Al final de ese último blog dice:

Ok, estoy enganchado! ¿Dónde puedo conseguirlo?

La utilidad de lectura .frm es parte de la nueva versión 1.3.0 Alpha disponible como descarga por separado en http://dev.mysql.com/downloads/tools/utilities/ . Simplemente elija el repositorio de la plataforma o el repositorio de origen y descárguelo.

Agradecemos sus comentarios y esperamos que esta utilidad ayude a ampliar su kit de herramientas de diagnóstico y recuperación.

ACTUALIZACIÓN 2013-06-11 14:05 EDT

Tengo buenas noticias. Instalé la versión de Windows de las utilidades MySQL. Probé el programa mysqlfrm desde la línea de comandos. .frmProbé obtener la información de user.frm en el esquema mysql. Esto es lo que obtuve:

C:\MySQL_5.6.10\data\mysql>mysqlfrm --server=root:rootpassword@localhost mysql:user.frm --port=3307
# Source on localhost: ... connected.
# Starting the spawned server on port 3307 ... done.
# Reading .frm files
#
# Reading the user.frm file.
#
# CREATE statement for user.frm:
#

CREATE TABLE `mysql`.`user` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `ssl_cipher` blob NOT NULL,
  `x509_issuer` blob NOT NULL,
  `x509_subject` blob NOT NULL,
  `max_questions` int(11) unsigned NOT NULL DEFAULT '0',
  `max_updates` int(11) unsigned NOT NULL DEFAULT '0',
  `max_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `plugin` char(64) COLLATE utf8_bin DEFAULT '',
  `authentication_string` text COLLATE utf8_bin,
  `password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'

#...done.

C:\MySQL_5.6.10\data\mysql>

Realmente funciona. La base de datos se ejecuta en mi computadora de escritorio usando el puerto 3306. Tuve que dar 3307 como puerto para ejecutar un proceso generado.

Podría mover la .frmcaja de Linux a la máquina de Windows y hacer lo mismo.

Darle una oportunidad !!!

RolandoMySQLDBA
fuente