Qu'est-ce que le format de fichier IBD ?
Les fichiers avec l'extension .ibd stockent les données de table de base de données MySQL InnoDB, y compris les lignes de table, les index clusterisés et les index secondaires. En mode « file-per-table » - le mode par défaut depuis MySQL 5.6 - chaque fichier .ibd contient les données et les index d'une seule table, le nom du fichier correspondant au nom de la table. Les configurations antérieures permettaient un tablespace partagé pour plusieurs tables et index, où chaque tablespace était identifié par un numéro d'identification unique.
Les fichiers .ibd contiennent des pages de taille fixe, 16 Ko par défaut (configurable de 4 Ko à 64 Ko à la création). Le format est binaire et est divisé en plusieurs types de pages avec des rôles définis :
FSP_HDR/ page d'en-tête - page 0, contenant l'en-tête du tablespace et les métadonnées- Pages
INDEX- pages d'arbre en B (B-tree) contenant les lignes de la table (clusterisées sur la clé primaire) et les entrées d'index secondaires XDES PAGE- Page de descripteur d'étendue (Extent Descriptor Page), décrivant le contenu des pages d'étendueINODE PAGE- page contenant les informations sur les segments de fichiers
Les fichiers .ibd ont une structure interne complexe et doivent être ouverts à l'aide d'outils de base de données dédiés. Le format prend en charge le chiffrement transparent optionnel (InnoDB TDE basé sur AES, disponible depuis MySQL 5.7) et la compression optionnelle au niveau de la page (ROW_FORMAT=COMPRESSED ou compression de page transparente). Chaque page porte une somme de contrôle CRC32 par page pour la vérification de l'intégrité.
Depuis MySQL 8.0, le schéma de la table (Serialized Dictionary Information, SDI) est directement intégré dans le .ibd, éliminant le fichier .frm séparé requis par MySQL 5.7 et les versions antérieures. Le format .ibd est également pris en charge par MariaDB et Percona Server.
L'importation de données .ibd entre serveurs nécessite que le fichier de métadonnées .cfg d'accompagnement - et, si le tablespace est chiffré, un fichier .cfp - soit également importé.
Sécurité et sûreté
RISQUE : MEDIUMUn fichier .ibd contient des données inertes - il ne s'exécute pas - mais il comporte des risques opérationnels et de confidentialité réels. Sur le plan opérationnel, ne copiez, ne déplacez ou ne supprimez jamais de fichiers .ibd pendant que le serveur MySQL est en cours d'exécution, et ne mélangez jamais des fichiers .ibd de différentes versions de serveur ou sans leur tablespace système (ibdata1) et leurs journaux de reprise - cela corrompt la table ou fait planter le serveur ; la méthode prise en charge pour les déplacer est l'utilisation de tablespaces transportables. En matière de confidentialité, un .ibd contient les lignes réelles de la table en texte clair sur le disque (sauf si le chiffrement TDE est activé), donc une fuite de .ibd constitue une violation de données : les fichiers .ibd de production peuvent exposer des enregistrements d'utilisateurs, des identifiants ou des informations personnelles. Manipulez-les et stockez-les comme la base de données sensible qu'ils sont.
Détails du format
en brefProgrammes qui ouvrent les fichiers IBD
Détails techniques
spécifications approfondies| Taille de page par défaut | 16 Ko ; configurable à la création du tablespace à 4 Ko, 8 Ko, 32 Ko ou 64 Ko via innodb_page_size |
| Ordre des octets | Big-endian - tous les entiers multi-octets sont stockés dans l'ordre gros-boutiste sur le disque |
| Variante du format de fichier | Antelope (formats de ligne REDUNDANT/COMPACT, MySQL ≤5.7) ou Barracuda (DYNAMIC/COMPRESSED, MySQL 5.7+) |
| En-tête/fin de page | Chaque page porte un en-tête FIL de 38 octets et une fin de page FIL de 8 octets entourant le corps de la page |
| Signature de fichier | Pas d'octets magiques fixes ; la première page est FSP_HDR (type 0x0008 aux octets 24-25 de l'en-tête FIL) |
| Somme de contrôle par page | CRC32 par défaut (depuis MySQL 5.6) ; prend également en charge l'héritage InnoDB ou aucune - valeur stockée dans l'en-tête et la fin de page FIL |
| Structure d'index | Arbre B+ clusterisé sur la clé primaire ; les index secondaires stockent des références à la clé primaire plutôt que des pointeurs de ligne directs |
| Taille de l'étendue | 1 Mo (64 pages consécutives de 16 Ko) ; le tablespace s'agrandit d'une étendue à la fois |
| Chiffrement | Chiffrement transparent des données (TDE) InnoDB AES-256 avec enveloppement de clé par page ; introduit dans MySQL 5.7 et MariaDB 10.1 |
| Compression | ROW_FORMAT=COMPRESSED utilise zlib au niveau de la page (format Barracuda) ; la compression de page transparente utilise le poinçonnage de fichiers (hole-punching) du système de fichiers |
| Stockage de débordement | Les valeurs de colonne dépassant le seuil de la page débordent vers des pages BLOB/débordement dédiées hors page au sein du même tablespace |
| Stockage du schéma | MySQL 8.0+ intègre le SDI (Serialized Dictionary Information) dans le tablespace ; MySQL 5.7 et les versions antérieures stockent le schéma dans un fichier .frm séparé |
| Formats de ligne pris en charge | REDUNDANT, COMPACT (Antelope) ; DYNAMIC (par défaut depuis MySQL 5.7), COMPRESSED (Barracuda) |
| Protection contre les pages déchirées | Le tampon de double écriture (doublewrite buffer) écrit chaque page de 16 Ko dans une zone dédiée avant l'emplacement final du tablespace, protégeant contre les écritures partielles |
| Type MIME | application/octet-stream (aucun type MIME spécifique au format enregistré) |
| Développeur | Oracle Corporation (moteur InnoDB ; à l'origine Innobase Oy, acquis par Oracle en 2005) |
| Publié | 2005-2008 (file-per-table via innodb_file_per_table; default since MySQL 5.6, 2013) |
| Dernière version | InnoDB in MySQL 8.0 / 8.4 (data dictionary moved into the tablespace; .frm removed) |
| Spécification | dev.mysql.com |
Conversions IBD
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers IBD.