Che cos'è il formato di file IBD?
I file con estensione .ibd memorizzano i dati delle tabelle del database MySQL InnoDB, incluse le righe della tabella, gli indici clusterizzati e gli indici secondari. Nella modalità «file-per-table» - quella predefinita a partire da MySQL 5.6 - ogni file .ibd contiene i dati e gli indici di una singola tabella, con il nome del file corrispondente al nome della tabella. Le configurazioni precedenti consentivano un tablespace condiviso per più tabelle e indici, in cui ogni tablespace era identificato da un numero ID univoco.
I file .ibd contengono pagine di dimensioni fisse, 16 KB per impostazione predefinita (configurabili da 4 KB a 64 KB al momento della creazione). Il formato è binario ed è suddiviso in diversi tipi di pagina con ruoli definiti:
FSP_HDR/ pagina di intestazione - pagina 0, contenente l'intestazione del tablespace e i metadati- Pagine
INDEX- pagine B-tree che contengono le righe della tabella (clusterizzate sulla chiave primaria) e le voci degli indici secondari XDES PAGE- Pagina descrittore di estensione (Extent Descriptor Page), che descrive il contenuto delle pagine di estensioneINODE PAGE- pagina contenente informazioni sui segmenti del file
I file .ibd hanno una struttura interna complessa e devono essere aperti utilizzando strumenti database dedicati. Il formato supporta la crittografia trasparente opzionale (InnoDB TDE basata su AES, disponibile da MySQL 5.7) e la compressione opzionale a livello di pagina (ROW_FORMAT=COMPRESSED o compressione trasparente della pagina). Ogni pagina riporta un checksum CRC32 per pagina per la verifica dell'integrità.
A partire da MySQL 8.0, lo schema della tabella (Serialized Dictionary Information, SDI) è incorporato direttamente nel file .ibd, eliminando il file .frm separato richiesto da MySQL 5.7 e versioni precedenti. Il formato .ibd è supportato anche da MariaDB e Percona Server.
L'importazione di dati .ibd tra server richiede che venga importato anche il file di metadati .cfg di accompagnamento e, se il tablespace è crittografato, un file .cfp.
Sicurezza e incolumità
RISCHIO: MEDIUMUn file .ibd contiene dati inerti - non si esegue - ma comporta reali rischi operativi e di privacy. Dal punto di vista operativo, non copiare, spostare o eliminare mai i file .ibd mentre il server MySQL è in funzione, e non mescolare mai file .ibd di diverse versioni del server o senza il loro tablespace di sistema (ibdata1) e i redo logs: farlo corrompe la tabella o causa il crash del server; il modo supportato per spostarli è tramite i tablespace trasportabili. Per quanto riguarda la privacy, un .ibd contiene le righe effettive della tabella in testo in chiaro su disco (a meno che non sia attiva la crittografia TDE), quindi un .ibd trapelato rappresenta una violazione dei dati: i file .ibd di produzione possono esporre record utente, credenziali o PII. Maneggiali e conservali come il database sensibile che sono.
Dettagli del formato
in sintesiProgrammi che aprono file IBD
Dettagli tecnici
specifiche approfondite| Dimensione pagina predefinita | 16 KB; configurabile alla creazione del tablespace a 4 KB, 8 KB, 32 KB o 64 KB tramite innodb_page_size |
| Ordine dei byte | Big-endian - tutti gli interi multi-byte sono memorizzati in ordine big-endian su disco |
| Variante formato file | Antelope (formati riga REDUNDANT/COMPACT, MySQL ≤5.7) o Barracuda (DYNAMIC/COMPRESSED, MySQL 5.7+) |
| Intestazione/coda della pagina | Ogni pagina porta un'intestazione FIL di 38 byte e una coda FIL di 8 byte che racchiudono il corpo della pagina |
| Firma del file | Nessun magic byte fisso; la prima pagina è FSP_HDR (tipo 0x0008 ai byte 24-25 dell'intestazione FIL) |
| Checksum per pagina | CRC32 per impostazione predefinita (da MySQL 5.6); supporta anche InnoDB legacy o nessuno - valore memorizzato nell'intestazione e nella coda FIL |
| Struttura dell'indice | B+ tree clusterizzato sulla chiave primaria; gli indici secondari memorizzano riferimenti alla chiave primaria anziché puntatori diretti alle righe |
| Dimensione estensione | 1 MB (64 pagine consecutive da 16 KB); il tablespace cresce di un'estensione alla volta |
| Crittografia | Crittografia trasparente dei dati (TDE) InnoDB AES-256 con wrapping della chiave per pagina; introdotta in MySQL 5.7 e MariaDB 10.1 |
| Compressione | ROW_FORMAT=COMPRESSED utilizza zlib a livello di pagina (formato Barracuda); la compressione trasparente della pagina utilizza il filesystem hole-punching |
| Archiviazione overflow | I valori delle colonne che superano la soglia interna alla pagina vengono spostati in pagine BLOB/overflow dedicate all'interno dello stesso tablespace |
| Archiviazione schema | MySQL 8.0+ incorpora SDI (Serialized Dictionary Information) nel tablespace; MySQL 5.7 e versioni precedenti memorizzano lo schema in un file .frm separato |
| Formati riga supportati | REDUNDANT, COMPACT (Antelope); DYNAMIC (predefinito da MySQL 5.7), COMPRESSED (Barracuda) |
| Protezione pagine incomplete | Il buffer doublewrite scrive ogni pagina da 16 KB in un'area dedicata prima della posizione finale nel tablespace, proteggendo dalle scritture parziali |
| Tipo MIME | application/octet-stream (nessun tipo MIME specifico registrato) |
| Sviluppatore | Oracle Corporation (motore InnoDB; originariamente Innobase Oy, acquisita da Oracle nel 2005) |
| Rilasciato | 2005-2008 (file-per-table via innodb_file_per_table; default since MySQL 5.6, 2013) |
| Ultima versione | InnoDB in MySQL 8.0 / 8.4 (data dictionary moved into the tablespace; .frm removed) |
| Specifica | dev.mysql.com |
Conversioni IBD
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file IBD.