Che cos'è il formato di file FRM?
Un file .frm è un file di definizione della tabella MySQL che memorizza informazioni sulla struttura e il layout di una singola tabella del database. Viene creato un file .frm per ogni tabella e il nome della tabella viene utilizzato per il nome del file .frm: quindi una tabella denominata orders produce orders.frm all'interno della directory dei dati di MySQL.
Il formato .frm registra solo lo schema della tabella: nomi delle colonne, tipi di dati, lunghezze, valori predefiniti e metadati di indici/chiavi. Non contiene mai i dati delle righe. Per le tabelle MyISAM, i dati effettivi risiedono in un file .MYD complementare (con gli indici in un file .MYI); MySQL richiedeva tutti e tre i file insieme per accedere completamente a una tabella MyISAM. Le tabelle InnoDB accoppiavano invece il loro .frm con un file tablespace .IBD separato.
Il file è un blob binario proprietario in formato little-endian che inizia con i magic bytes 0xFE 0x01. È stato introdotto con MySQL 1.0 nel 1995 ed è stato utilizzato da ogni storage engine - MyISAM e InnoDB allo stesso modo - fino a MySQL 5.7 e MariaDB. MySQL 8.0 (dicembre 2018) ha rimosso interamente i file .frm, spostando i metadati delle tabelle nel dizionario dei dati transazionali di InnoDB. MariaDB ha continuato a utilizzare i file .frm dopo tale scissione.
Quando i dati delle righe vengono persi o danneggiati, un file .frm superstite può essere ispezionato con l'utility diagnostica mysqlfrm per ricostruire l'istruzione CREATE TABLE e recuperare il layout delle colonne.
Sicurezza e incolumità
RISCHIO: LOWUn file .frm è un metadato binario passivo della tabella: non contiene codice eseguibile ed è sicuro da maneggiare. I rischi pratici riguardano il recupero dei dati, non il malware: un .frm ripristinato in una versione di MySQL errata può fallire o corrompere il dizionario, e un .frm isolato senza i suoi .MYD/.ibd non può restituire le righe. Lavora sempre su copie, rispetta la versione originale del server e tieni insieme i file di dati complementari.
Dettagli del formato
in sintesi- Visual Basic Form file - File sorgente che descrive il layout e i controlli di un modulo in VB6 e versioni precedenti (testo semplice).
- Modulo FormFlow - Documento di modulo elettronico creato dal software legacy JetForm/FormFlow.
- Adobe FrameMaker (legacy) - Le vecchie installazioni di FrameMaker utilizzavano .frm per alcune risorse di moduli/modelli.
0xFE 0x01 per il formato classico). Non esiste una firma ASCII stabile tra le versioni; il file è un blob binario proprietario, quindi l'identificazione avviene tramite estensione + contesto (si trova accanto a .MYD/.MYI o .ibd in una directory dei dati MySQL).
Programmi che aprono file FRM
SHOW CREATE TABLE / mysqldump. È il modo corretto di usare un .frm. CREATE TABLE direttamente dal file, senza un server in esecuzione. SHOW CREATE TABLE / mysqldump. È il modo corretto di usare un .frm. /var/lib/mysql (versione corrispondente), avvia il servizio, quindi SHOW CREATE TABLE o mysqldump. CREATE TABLE direttamente dal file, senza un server in esecuzione. Dettagli tecnici
specifiche approfondite| Struttura del file | Blob binario proprietario little-endian; nessuna compressione o crittografia |
| Magic bytes | 0xFE 0x01 all'offset 0 (intestazione binaria dipendente dalla versione; nessuna firma ASCII stabile) |
| Contenuto | Definizioni delle colonne (nomi, tipi, lunghezze, valori predefiniti), metadati di indici/chiavi e opzioni della tabella - solo schema, mai dati delle righe |
| Dimensione tipica del file | 1 KB - 50 KB per tabella; cresce con il numero di colonne e indici |
| Tipo MIME | application/octet-stream |
| Un file per tabella | Ogni tabella riceve il proprio file .frm che prende il nome dalla tabella, memorizzato nella sottodirectory dello schema della directory dei dati di MySQL |
| Compagni MyISAM | .MYD (dati riga) e .MYI (dati indice) - tutti e tre necessari per l'accesso completo alla tabella MyISAM |
| Compagno InnoDB | File tablespace .ibd - il .frm conteneva lo schema mentre il .ibd conteneva dati e indici |
| Copertura engine | Scritto da tutti gli storage engine in MySQL 3.x - 5.7: MyISAM, InnoDB, MEMORY, CSV, ARCHIVE e altri |
| Rimosso in | MySQL 8.0 (dicembre 2018): metadati spostati nel dizionario dei dati transazionali di InnoDB; nessun file .frm creato o letto |
| Ancora usato da | MariaDB ha continuato a generare file .frm dopo la scissione da MySQL 8.0 |
| Utility di ripristino | mysqlfrm (MySQL Utilities) legge un .frm autonomo per ricostruire l'istruzione DDL `CREATE TABLE` |
| Sviluppatore | MySQL AB (originale); Oracle Corporation (dall'acquisizione del 2010) |
| Sistemi operativi | Multipiattaforma: Linux, Windows, macOS, FreeBSD - ovunque sia stato eseguito MySQL o MariaDB |
| Rilasciato | 1995 (MySQL 1.0, used by ISAM/MyISAM/InnoDB through MySQL 5.7) |
| Ultima versione | Last used in MySQL 5.7 / MariaDB; removed from MySQL 8.0 (December 2018) |
| Specifica | dev.mysql.com |
Conversioni FRM
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file FRM.
Domande frequenti
Come si apre un file .frm?
SHOW CREATE TABLE. L'apertura del binario grezzo in un editor di testo mostrerà solo caratteri incomprensibili.Posso recuperare i miei dati solo da un file .frm?
Come ottengo l'istruzione CREATE TABLE da un .frm?
SHOW CREATE TABLE.Perché MySQL 8.0 non ha file .frm?
Ho copiato il .frm ma ricevo «Table doesn't exist» - perché?
mysqlfrm per leggere solo la struttura.Quali programmi aprono i .frm oltre a MySQL?
mysqlfrm li legge senza un server. Non esiste un «visualizzatore» generico: è un formato interno al server.