Come è possibile estrarre lo schema delle tabelle solo dal file .frm?


8

Ho estratto la directory dei dati di mysql da un backup e ho bisogno di ottenere lo schema da una vecchia tabella, tuttavia è un backup da una macchina diversa.

Oggi ho letto un buon numero di tutorial su come farlo, ma ogni volta sembra fallire o finisco per dover reinstallare mysql perché mysql si blocca o si arresta in modo anomalo. Ho provato quanto segue:

  • Crea un database diverso
  • Crea una tabella con lo stesso nome in quel database
  • Sostituisci file
  • Arrestare / avviare il motore
  • Ripristina dal .frmfile

Ho provato in vari ordini e combinazioni.

Esiste uno strumento esterno in grado di estrarre lo schema dal .frmfile? Riesco a vedere i nomi delle colonne se apro il file. Ho dato un'occhiata ma non riesco a trovare nulla che mi permetta di farlo.

Grazie in anticipo.


Risposte:


8

A TwinDB abbiamo creato un'interfaccia web per mysqlfrm. È gratuito e facile da usare.

Per recuperare la struttura della tabella devi solo caricare il file .frm.

Ecco i passaggi. 1. Apri https://recovery.twindb.com/ . Fai clic su "Ripristina struttura" inserisci qui la descrizione dell'immagine

  1. Nel prossimo sottomenu fai clic su "dal file .frm" inserisci qui la descrizione dell'immagine

  2. Nella vista successiva fai clic su "Sfoglia" e seleziona un file .frm su un disco locale. Fai clic su "Carica" inserisci qui la descrizione dell'immagine

  3. Aspetta che stia facendo la magia inserisci qui la descrizione dell'immagine

  4. Ottieni la struttura recuperata. inserisci qui la descrizione dell'immagine

È anche possibile caricare un archivio con un mucchio di file .frm. Il sito li recupererà del tutto.


2
Il sito non funziona più.
Anbuselvan Rocky,

Download @AnbuselvanRocky mysqlfrm(ho scaricato la versione 1.6.5) ed mysqlfrm --diagnostic /path/to/my_table.frm
eseguilo

5

Ho risposto a domande come questa prima

Ho fatto riferimento a un blog di Chris Calendar sulla connessione dei .ibdfile al dizionario dei dati.

Se non si dispone del .ibdinsieme .frm, è probabile che MySQL è stato eseguito con innodb_file_per_table off. Si prega di fare riferimento al Feb 03, 2012post su questo. Se questo è Linux, assicurati di eseguire

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

prima di iniziare mysql.

Provaci !!!

INFO SUPPLEMENTARI

In fondo a quell'ultimo blog si dice:

Ok, sono agganciato! Dove lo posso prendere?

L'utilità di lettura .frm fa parte della nuova versione 1.3.0 Alpha disponibile come download separato all'indirizzo http://dev.mysql.com/downloads/tools/utilities/ . Basta scegliere il repository della piattaforma o il repository di origine e scaricarlo.

Accogliamo con favore i vostri commenti e speriamo che questa utility vi aiuti ad espandere il vostro toolkit di diagnosi e recupero.

AGGIORNAMENTO 2013-06-11 14:05 EDT

Ho buone notizie. Ho installato la versione Windows delle utility MySQL. Ho testato il programma mysqlfrm dalla riga di comando. Ho provato a ottenere le .frminformazioni da user.frm nello schema mysql. Ecco cosa ho ottenuto:

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>

Funziona veramente. Il database è in esecuzione sul mio computer desktop utilizzando la porta 3306. Ho dovuto fornire 3307 come porta per eseguire un processo generato.

Potrei spostare il .frmda un box Linux sul computer Windows e fare lo stesso.

Provaci !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.