Converti .frm (file di dati SQL) in file di testo


0

Sto provando a convertire .frm (file di dati sql) in file di testo, la risonanza per questo è perché voglio vedere come fa il motore sql a archiviare i dati "dietro le quinte", ad esempio: quando si utilizza l'archiviazione sql "ENUM" un "INTEGER" chiamato "INDEX", quindi se qualcuno conosce un software o un metodo per convertire il .frm in .txt, grazie a tutti e buona giornata.

Risposte:


1

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.

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.