Questo articolo fornisce un modo comprovato per farlo:
Le basi di come farlo non sono troppo difficili da capire, sono i dettagli che diventano difficili. La prima parte di questo problema è come estrarre la definizione della tabella dai file .frm. Tratterò la seconda parte del problema in un altro post. Potresti scrivere un programma che legge e analizza il file .frm e genera la definizione della tabella, ma è un sacco di lavoro, specialmente quando puoi ingannare MySQL nel farlo per te. Ecco come lo faresti per il file foo.frm.
mysql> CREATE TABLE `test`.`foo` (id int) ENGINE=InnoDB;
Abbiamo creato una tabella InnoDB chiamata foo. MySQL ha scritto un file foo.frm e un file foo.ibd in $ datadir / test. Ha anche registrato un record di questa tabella nel dizionario dei dati.
mysql> FLUSH TABLES;
Questo fa sì che MySQL chiuda tutte le tabelle aperte e svuoti la cache delle query. L'idea è di forzare MySQL a dimenticare la tabella "pippo" che abbiamo appena creato.
bash# cp foo.frm /var/lib/mysql/test;
Abbiamo appena sovrascritto la definizione della tabella per test.foo. L'abbiamo fatto caldo, mentre MySQL era ancora in esecuzione.
mysql> SHOW CREATE TABLE `test`.`foo`;
Ciò genererà la definizione della tabella per il file foo.frm che abbiamo appena copiato nella directory di test. MySQL sarà probabilmente un po 'confuso, poiché è probabile che le informazioni nel file .frm non corrispondano a quelle contenute nel tablespace del sistema. Probabilmente vedrai un messaggio come questo nel tuo registro errori:
[ERRORE] La tabella ./test/foo non ha una chiave primaria nel dizionario dati InnoDB, ma ne ha una in MySQL! Se hai creato la tabella con una versione di MySQL <3.23.54 e non hai definito una chiave primaria, ma hai definito una chiave univoca con tutte le colonne non NULL, MySQL considera internamente quella chiave come chiave primaria. È possibile correggere questo errore dump + DROP + CREATE + reimportazione della tabella.
Va bene però, basta ripulire.
mysql> DROP TABLE `test`.`foo`;
Per evitare il fastidio di dover passare attraverso questo per alcune centinaia di tabelle, utilizzare lo script fornito nell'articolo bluegecko . Dovresti essere ordinato. Chagbert.