Wat is het IBD-bestandsformaat?
Bestanden met de extensie .ibd slaan MySQL InnoDB-databasetabelgegevens op, inclusief tabelrijen, geclusterde indexen en secundaire indexen. In de „file-per-table”-modus - de standaard sinds MySQL 5.6 - bevat elk .ibd-bestand de gegevens en indexen van één tabel, waarbij de bestandsnaam overeenkomt met de tabelnaam. Eerdere configuraties stonden een gedeelde tablespace toe voor meerdere tabellen en indexen, waarbij elke tablespace werd geïdentificeerd door een uniek ID-nummer.
.ibd-bestanden bevatten pagina's van vaste grootte, standaard 16 KB (configureerbaar van 4 KB tot 64 KB bij aanmaak). Het formaat is binair en is onderverdeeld in verschillende paginatypen met gedefinieerde rollen:
FSP_HDR/ headerpagina - pagina 0, bevat de tablespace-header en metadataINDEX-pagina's - B-tree pagina's die tabelrijen bevatten (geclusterd op de primaire sleutel) en secundaire indexvermeldingenXDES PAGE- Extent Descriptor Page, die de inhoud van extent-pagina's beschrijftINODE PAGE- pagina met bestandssegmentinformatie
.ibd-bestanden hebben een complexe interne structuur en moeten worden geopend met speciale databasetools. Het formaat ondersteunt optionele transparante versleuteling (op AES gebaseerde InnoDB TDE, beschikbaar sinds MySQL 5.7) en optionele compressie op paginaniveau (ROW_FORMAT=COMPRESSED of transparante paginacompressie). Elke pagina bevat een CRC32-checksum per pagina voor integriteitsverificatie.
Vanaf MySQL 8.0 is het tabelschema (Serialized Dictionary Information, SDI) rechtstreeks ingebed in de .ibd, waardoor het afzonderlijke .frm-bestand dat vereist was door MySQL 5.7 en eerder, overbodig is geworden. Het .ibd-formaat wordt ook ondersteund door MariaDB en Percona Server.
Het importeren van .ibd-gegevens tussen servers vereist dat het bijbehorende .cfg-metadatabestand - en, als de tablespace is versleuteld, een .cfp-bestand - ook wordt geïmporteerd.
Beveiliging & veiligheid
RISICO: MEDIUMEen .ibd-bestand bevat inerte gegevens - het voert niets uit - maar brengt reële operationele en privacyrisico's met zich mee. Operationeel gezien mag u .ibd-bestanden nooit kopiëren, verplaatsen of verwijderen terwijl de MySQL-server draait, en mag u nooit .ibd-bestanden van verschillende serverversies mengen of gebruiken zonder hun systeem-tablespace (ibdata1) en redo logs - dit corrumpeert de tabel of laat de server crashen; de ondersteunde manier om ze te verplaatsen is via „transportable tablespaces”. Wat betreft privacy bevat een .ibd de werkelijke rijen van de tabel in platte tekst op de schijf (tenzij TDE-versleuteling is ingeschakeld), dus een gelekt .ibd-bestand is een datalek: productie-.ibd-bestanden kunnen gebruikersgegevens, inloggegevens of PII blootstellen. Behandel en bewaar ze als de gevoelige database die ze zijn.
Formaatdetails
in een notendopProgramma's die IBD-bestanden openen
Technische details
diepe specificaties| Standaard paginagrootte | 16 KB; configureerbaar bij aanmaak van tablespace naar 4 KB, 8 KB, 32 KB of 64 KB via innodb_page_size |
| Bytevolgorde | Big-endian - alle integers van meerdere bytes worden in big-endian volgorde op schijf opgeslagen |
| Bestandsformaatvariant | Antelope (REDUNDANT/COMPACT rijformaten, MySQL ≤5.7) of Barracuda (DYNAMIC/COMPRESSED, MySQL 5.7+) |
| Paginaheader/trailer | Elke pagina bevat een 38-byte FIL-header en een 8-byte FIL-trailer die de paginabody omsluiten |
| Bestandssignatuur | Geen vaste magic bytes; eerste pagina is FSP_HDR (type 0x0008 op bytes 24-25 van de FIL-header) |
| Checksum per pagina | Standaard CRC32 (sinds MySQL 5.6); ondersteunt ook InnoDB legacy of geen - waarde opgeslagen in FIL-header en trailer |
| Indexstructuur | B+ tree geclusterd op de primaire sleutel; secundaire indexen slaan verwijzingen naar de primaire sleutel op in plaats van directe rij-pointers |
| Extent-grootte | 1 MB (64 opeenvolgende pagina's van 16 KB); de tablespace groeit met één extent per keer |
| Versleuteling | AES-256 InnoDB transparante data-encryptie (TDE) met key-wrapping per pagina; geïntroduceerd in MySQL 5.7 en MariaDB 10.1 |
| Compressie | ROW_FORMAT=COMPRESSED gebruikt zlib op paginaniveau (Barracuda-formaat); transparante paginacompressie gebruikt „filesystem hole-punching” |
| Overflow-opslag | Kolomwaarden die de drempelwaarde binnen de pagina overschrijden, lopen over naar speciale off-page BLOB/overflow-pagina's binnen dezelfde tablespace |
| Schema-opslag | MySQL 8.0+ sluit SDI (Serialized Dictionary Information) in de tablespace in; MySQL 5.7 en eerder slaan het schema op in een apart .frm-bestand |
| Ondersteunde rijformaten | REDUNDANT, COMPACT (Antelope); DYNAMIC (standaard sinds MySQL 5.7), COMPRESSED (Barracuda) |
| Bescherming tegen „torn pages” | Doublewrite-buffer schrijft elke pagina van 16 KB naar een speciaal gebied vóór de uiteindelijke locatie in de tablespace, ter bescherming tegen gedeeltelijke schrijfacties |
| MIME-type | application/octet-stream (geen formaatspecifiek MIME-type geregistreerd) |
| Ontwikkelaar | Oracle Corporation (InnoDB-engine; oorspronkelijk Innobase Oy, overgenomen door Oracle in 2005) |
| Uitgebracht | 2005-2008 (file-per-table via innodb_file_per_table; default since MySQL 5.6, 2013) |
| Laatste versie | InnoDB in MySQL 8.0 / 8.4 (data dictionary moved into the tablespace; .frm removed) |
| Specificatie | dev.mysql.com |
IBD conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over IBD-bestanden.