Vad är filformatet IBD?
Filer med filändelsen .ibd lagrar MySQL InnoDB-databastabell-data, inklusive tabellrader, klustrade index och sekundära index. I läget «file-per-table» - standard sedan MySQL 5.6 - innehåller varje .ibd-fil en tabells data och index, där filnamnet motsvarar tabellnamnet. Tidigare konfigurationer tillät en delad tabellyta för flera tabeller och index, där varje tabellyta identifierades av ett unikt ID-nummer.
.ibd-filer innehåller sidor med fast storlek, som standard 16 KB (konfigurerbart från 4 KB till 64 KB vid skapandet). Formatet är binärt och är uppdelat i flera sidtyper med definierade roller:
FSP_HDR/ huvud-sida - sida 0, som innehåller tabellytans huvud och metadataINDEX-sidor - B-trädssidor som innehåller tabellrader (klustrade på primärnyckeln) och sekundära indexposterXDES PAGE- Extent Descriptor-sida, som beskriver innehållet i utsträckningssidor (extents)INODE PAGE- sida som innehåller information om filsegment
.ibd-filer har en komplex intern struktur och bör öppnas med dedikerade databasverktyg. Formatet stöder valfri transparent kryptering (AES-baserad InnoDB TDE, tillgänglig sedan MySQL 5.7) och valfri komprimering på sidnivå (ROW_FORMAT=COMPRESSED eller transparent sidkomprimering). Varje sida bär en CRC32-kontrollsumma per sida för integritetsverifiering.
Från och med MySQL 8.0 är tabellschemat (Serialized Dictionary Information, SDI) inbäddat direkt i .ibd-filen, vilket eliminerar den separata .frm-fil som krävdes av MySQL 5.7 och tidigare. .ibd-formatet stöds även av MariaDB och Percona Server.
Import av .ibd-data mellan servrar kräver att den medföljande metadatafilen .cfg - och, om tabellytan är krypterad, en .cfp-fil - också importeras.
Säkerhet & trygghet
RISK: MEDIUMEn .ibd-fil är inert data - den exekveras inte - men den innebär reella operativa risker och integritetsrisker. Operativt bör du aldrig kopiera, flytta eller radera .ibd-filer medan MySQL-servern körs, och blanda aldrig .ibd-filer från olika serverversioner eller utan deras systemtabellyta (ibdata1) och redo-loggar - att göra det korrumperar tabellen eller kraschar servern; det stödda sättet att flytta dem är via transportabla tabellytor. Integritetsmässigt innehåller en .ibd-fil tabellens faktiska rader i klartext på disken (om inte TDE-kryptering är aktiverad), så en läckt .ibd-fil innebär en dataläcka: .ibd-filer från produktion kan exponera användarregister, inloggningsuppgifter eller PII. Hantera och förvara dem som den känsliga databas de är.
Formatdetaljer
i ett nötskalProgram som öppnar IBD-filer
Tekniska detaljer
djup specifikation| Standard sidstorlek | 16 KB; konfigurerbart vid skapande av tabellyta till 4 KB, 8 KB, 32 KB eller 64 KB via innodb_page_size |
| Byteordning | Big-endian - alla heltal med flera byte lagras i big-endian-ordning på disken |
| Variant av filformat | Antelope (REDUNDANT/COMPACT radformat, MySQL ≤5.7) eller Barracuda (DYNAMIC/COMPRESSED, MySQL 5.7+) |
| Sidhuvud/sidfot | Varje sida bär ett 38-byte FIL-huvud och en 8-byte FIL-fot som omsluter sidans innehåll |
| Filsignatur | Inga fasta magiska byte; första sidan är FSP_HDR (typ 0x0008 vid byte 24-25 i FIL-huvudet) |
| Kontrollsumma per sida | CRC32 som standard (sedan MySQL 5.6); stöder även InnoDB legacy eller ingen - värdet lagras i FIL-huvud och sidfot |
| Indexstruktur | B+ träd klustrat på primärnyckeln; sekundära index lagrar primärnyckelreferenser snarare än direkta radpekare |
| Extent-storlek | 1 MB (64 på varandra följande 16 KB-sidor); tabellytan växer med en extent i taget |
| Kryptering | AES-256 InnoDB transparent datakryptering (TDE) med nyckelinpackning per sida; introducerades i MySQL 5.7 och MariaDB 10.1 |
| Komprimering | ROW_FORMAT=COMPRESSED använder zlib på sidnivå (Barracuda-format); transparent sidkomprimering använder filsystemets «hole-punching» |
| Spill-lagring | Kolumnvärden som överskrider sidans tröskelvärde spills över till dedikerade off-page BLOB/overflow-sidor inom samma tabellyta |
| Schemalagring | MySQL 8.0+ bäddar in SDI (Serialized Dictionary Information) i tabellytan; MySQL 5.7 och tidigare lagrar schemat i en separat .frm-fil |
| Radformat som stöds | REDUNDANT, COMPACT (Antelope); DYNAMIC (standard sedan MySQL 5.7), COMPRESSED (Barracuda) |
| Skydd mot ofullständiga sidskrivningar | Doublewrite-buffert skriver varje 16 KB-sida till ett dedikerat område före den slutliga platsen i tabellytan för att skydda mot partiella skrivningar |
| MIME-typ | application/octet-stream (ingen formatspecifik MIME-typ registrerad) |
| Utvecklare | Oracle Corporation (InnoDB-motorn; ursprungligen Innobase Oy, förvärvat av Oracle 2005) |
| Släppt | 2005-2008 (file-per-table via innodb_file_per_table; default since MySQL 5.6, 2013) |
| Senaste version | InnoDB in MySQL 8.0 / 8.4 (data dictionary moved into the tablespace; .frm removed) |
| Specifikation | dev.mysql.com |
IBD-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om IBD-filer.