Co to jest format pliku IBD?
Pliki z rozszerzeniem .ibd przechowują dane tabel bazy danych MySQL InnoDB, w tym wiersze tabel, indeksy klastrowane oraz indeksy pomocnicze. W trybie „file-per-table” - domyślnym od wersji MySQL 5.6 - każdy plik .ibd przechowuje dane i indeksy jednej tabeli, a nazwa pliku odpowiada nazwie tabeli. Wcześniejsze konfiguracje pozwalały na współdzieloną przestrzeń tabel dla wielu tabel i indeksów, gdzie każda przestrzeń była identyfikowana przez unikalny numer ID.
Pliki .ibd zawierają strony o stałym rozmiarze, domyślnie 16 KB (konfigurowalne od 4 KB do 64 KB podczas tworzenia). Format jest binarny i podzielony na kilka typów stron o zdefiniowanych rolach:
FSP_HDR/ strona nagłówka - strona 0, zawierająca nagłówek przestrzeni tabel i metadane- Strony
INDEX- strony B-drzewa przechowujące wiersze tabeli (sklastrowane według klucza głównego) oraz wpisy indeksów pomocniczych XDES PAGE- strona deskryptora obszaru (Extent Descriptor Page), opisująca zawartość stron obszarówINODE PAGE- strona zawierająca informacje o segmentach plików
Pliki .ibd mają złożoną strukturę wewnętrzną i powinny być otwierane za pomocą dedykowanych narzędzi bazodanowych. Format obsługuje opcjonalne, przezroczyste szyfrowanie (InnoDB TDE oparte na AES, dostępne od MySQL 5.7) oraz opcjonalną kompresję na poziomie strony (ROW_FORMAT=COMPRESSED lub przezroczysta kompresja stron). Każda strona posiada sumę kontrolną CRC32 dla weryfikacji integralności.
Od wersji MySQL 8.0 schemat tabeli (Serialized Dictionary Information, SDI) jest osadzony bezpośrednio w pliku .ibd, co eliminuje potrzebę posiadania osobnego pliku .frm wymaganego przez MySQL 5.7 i starsze. Format .ibd jest również obsługiwany przez MariaDB i Percona Server.
Importowanie danych .ibd między serwerami wymaga, aby wraz z nimi zaimportowany został towarzyszący plik metadanych .cfg - a jeśli przestrzeń tabel jest zaszyfrowana, również plik .cfp.
Bezpieczeństwo
RYZYKO: MEDIUMPlik .ibd to dane pasywne - nie wykonuje się - ale niesie ze sobą realne ryzyko operacyjne i prywatności. Operacyjnie: nigdy nie kopiuj, nie przenoś ani nie usuwaj plików .ibd, gdy serwer MySQL jest uruchomiony, i nigdy nie mieszaj plików .ibd z różnych wersji serwera lub bez ich systemowej przestrzeni tabel (ibdata1) i dzienników redo - spowoduje to uszkodzenie tabeli lub awarię serwera; wspieranym sposobem ich przenoszenia są przenośne przestrzenie tabel. Pod względem prywatności: plik .ibd zawiera rzeczywiste wiersze tabeli w postaci jawnej na dysku (chyba że włączono szyfrowanie TDE), więc wyciek pliku .ibd jest naruszeniem danych: produkcyjne pliki .ibd mogą ujawnić rekordy użytkowników, dane uwierzytelniające lub dane osobowe. Należy się z nimi obchodzić i przechowywać je jak wrażliwą bazę danych.
Szczegóły formatu
w pigułceProgramy otwierające pliki IBD
Szczegóły techniczne
specyfikacja| Domyślny rozmiar strony | 16 KB; konfigurowalny przy tworzeniu przestrzeni tabel na 4 KB, 8 KB, 32 KB lub 64 KB poprzez innodb_page_size |
| Kolejność bajtów | Big-endian - wszystkie wielobajtowe liczby całkowite są przechowywane na dysku w kolejności big-endian |
| Wariant formatu pliku | Antelope (formaty wierszy REDUNDANT/COMPACT, MySQL ≤5.7) lub Barracuda (DYNAMIC/COMPRESSED, MySQL 5.7+) |
| Nagłówek/stopka strony | Każda strona posiada 38-bajtowy nagłówek FIL i 8-bajtową stopkę FIL otaczającą treść strony |
| Sygnatura pliku | Brak stałych magicznych bajtów; pierwsza strona to FSP_HDR (typ 0x0008 w bajtach 24-25 nagłówka FIL) |
| Suma kontrolna strony | Domyślnie CRC32 (od MySQL 5.6); obsługuje również dziedzictwo InnoDB lub brak - wartość przechowywana w nagłówku i stopce FIL |
| Struktura indeksu | B+ drzewo sklastrowane na kluczu głównym; indeksy pomocnicze przechowują odniesienia do klucza głównego zamiast bezpośrednich wskaźników do wierszy |
| Rozmiar obszaru (extent) | 1 MB (64 kolejne strony po 16 KB); przestrzeń tabel rośnie o jeden obszar naraz |
| Szyfrowanie | Przezroczyste szyfrowanie danych (TDE) InnoDB AES-256 z zawijaniem kluczy na stronę; wprowadzone w MySQL 5.7 i MariaDB 10.1 |
| Kompresja | ROW_FORMAT=COMPRESSED używa zlib na poziomie strony (format Barracuda); przezroczysta kompresja stron wykorzystuje mechanizm „hole-punching” systemu plików |
| Przechowywanie nadmiarowe (overflow) | Wartości kolumn przekraczające próg strony są przenoszone do dedykowanych stron BLOB/overflow w tej samej przestrzeni tabel |
| Przechowywanie schematu | MySQL 8.0+ osadza SDI (Serialized Dictionary Information) w przestrzeni tabel; MySQL 5.7 i starsze przechowują schemat w osobnym pliku .frm |
| Obsługiwane formaty wierszy | REDUNDANT, COMPACT (Antelope); DYNAMIC (domyślny od MySQL 5.7), COMPRESSED (Barracuda) |
| Ochrona przed niepełnym zapisem strony | Bufor podwójnego zapisu (doublewrite buffer) zapisuje każdą stronę 16 KB w dedykowanym obszarze przed ostateczną lokalizacją, chroniąc przed częściowymi zapisami |
| Typ MIME | application/octet-stream (brak zarejestrowanego typu MIME specyficznego dla formatu) |
| Deweloper | Oracle Corporation (silnik InnoDB; pierwotnie Innobase Oy, przejęte przez Oracle w 2005 r.) |
| Wydano | 2005-2008 (file-per-table via innodb_file_per_table; default since MySQL 5.6, 2013) |
| Najnowsza wersja | InnoDB in MySQL 8.0 / 8.4 (data dictionary moved into the tablespace; .frm removed) |
| Specyfikacja | dev.mysql.com |
Konwersje IBD
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki IBD.