Jak odzyskać bazę danych MySQL po usunięciu plików lub partycji w Ubuntu: RAID 6 i LUKS2

Usuwanie plików lub całej partycji dysku w Ubuntu może prowadzić do krytycznej utraty danych, zwłaszcza jeśli na serwerze działa baza danych MySQL. Sytuacja staje się znacznie bardziej skomplikowana, gdy system pamięci masowej jest oparty na macierzy RAID 6, a dane są dodatkowo chronione szyfrowaniem LUKS2. W takich warunkach standardowe narzędzia odzyskiwania nie zawsze przynoszą oczekiwany rezultat, a nieostrożne działania mogą trwale zniszczyć informacje. W tym artykule omówimy możliwe scenariusze utraty danych, specyfikę pracy z RAID 6 i LUKS2 oraz proces odzyskiwania bazy danych MySQL po przypadkowym usunięciu plików lub partycji dysku.

Jak odzyskać bazę danych MySQL po usunięciu plików lub partycji w Ubuntu: RAID 6 i LUKS2

Pliki bazy danych MySQL i ich kopie zapasowe na serwerze Linux mogą stać się niedostępne z różnych powodów: przypadkowego usunięcia plików, formatowania lub usunięcia partycji, uszkodzenia systemu plików, awarii macierzy RAID, awarii dysku lub awarii kontrolera RAID. Sytuacja staje się jeszcze bardziej złożona, jeśli dane są przechowywane na zaszyfrowanej partycji LUKS2.

Hetman RAID Recovery pomaga odtwarzać strukturę macierzy RAID, odnajdywać utracone partycje, odblokowywać LUKS2, jeśli dostępne jest hasło, oraz odzyskiwać pliki bazy danych i zrzuty SQL.

Pokażemy działanie programu na komputerze z systemem Windows. Jednak Hetman RAID Recovery jest również dostępny dla systemów Linux i macOS.

Przejdź do widoku
Jak odzyskać usuniętą bazę MySQL z RAID 6 + LUKS2 (Ubuntu)

Jak odzyskać usuniętą bazę MySQL z RAID 6 + LUKS2 (Ubuntu)

Przygotowanie środowiska testowego i bazy danych MySQL

Do testów użyliśmy serwera Dell PowerEdge R710 z kontrolerem PERC H700.

Parametr Specyfikacja
Model serwera Dell PowerEdge R710
Format obudowy Rack 2U
Procesor Do 2 × Intel Xeon serii 5500/5600
RAM DDR3 ECC, do 288 GB (18 slotów)
Kontroler RAID Dell PERC H700
Typ RAID Sprzętowy RAID
Obsługiwane poziomy RAID RAID 0, 1, 5, 6, 10, 50, 60
Konfiguracja macierzy RAID 6
Interfejs dysków SAS/SATA, do 6 Gbit/s
Liczba zatok na dyski Do 6 × 3,5″ lub 8 × 2,5″ w zależności od konfiguracji
Pamięć podręczna kontrolera RAID 512 MB lub 1 GB (w zależności od modelu)
Zabezpieczenie pamięci podręcznej BBU — ochrona pamięci podręcznej z zasilaniem bateryjnym
System operacyjny Ubuntu Server
Szyfrowanie danych LUKS2 (na poziomie Linux, nie na kontrolerze RAID)
System zarządzania bazą danych MySQL
Tolerancja awarii RAID 6 Pozwala na jednoczesną awarię do dwóch dysków
Narzędzia diagnostyczne Dell OpenManage, MegaCLI, StorCLI (jeśli zgodne)

Aby zapewnić systemowi operacyjnemu bezpośredni dostęp do każdego fizycznego dysku, na kontrolerze utworzono sześć jednodyskowych macierzy RAID 0 — po jednej dla każdego dysku. Na jednej z nich zainstalowano Ubuntu Server 24.04, a pozostałe cztery połączono w programową macierz MD RAID 6 za pośrednictwem Cockpit.

Na macierzy utworzono tablicę partycji GPT oraz trzy partycje, jako system plików wybrano ext4, a dla każdej z nich włączono szyfrowanie LUKS2.

Urządzenie MDRAID

Katalog mysql-data został umieszczony na trzeciej partycji i zawierał dane testowej bazy company_db, pliki systemowe oraz logi MySQL. Użyto MySQL w wersji 8.0.46.

Katalog mysql-data z danymi testowej bazy company_db

Sama baza danych zawierała tabele customers, products i orders, a także widok, procedurę składowaną i funkcję.

Baza danych zawiera tabele customers, products i orders

Kopia zapasowa bazy danych została utworzona w MySQL Workbench jako zrzut SQL i zapisana w katalogu mysql-backups.

Przed testem katalogi mysql-data i mysql-backups zostały skopiowane z trzeciej partycji na drugą. Następnie drugą partycję usunięto za pomocą Cockpit, a pliki bazy danych i zrzut SQL usunięto z trzeciej partycji przy użyciu kombinacji Shift + Delete, z pominięciem Kosza. W ten sposób przygotowano dwa scenariusze: odzyskiwanie plików z usuniętej partycji oraz odzyskiwanie usuniętych plików z zachowanej partycji.

Druga partycja została usunięta za pomocą Cockpit

Podłączanie dysków do analizy

W naszym przypadku dyski uczestniczące w macierzy RAID 6 zostały podłączone do komputera z systemem Windows za pośrednictwem stacji dokującej USB, a do analizy uruchomiono Hetman RAID Recovery.

Do odzyskiwania danych z uszkodzonych macierzy RAID, urządzeń NAS i innych wielodyskowych systemów pamięci masowej.

Oprócz pracy z fizycznymi dyskami program obsługuje analizę pełnych obrazów dysków typu bajt po bajcie. Takie obrazy można tworzyć bezpośrednio w Hetman RAID Recovery za pomocą funkcji Save Disk i zapisywać na innym sprawnym dysku.

Hetman RAID Recovery: Save Disk

Jest to szczególnie przydatne, jeśli dysk jest niestabilny, zawiera uszkodzone sektory lub generuje błędy odczytu. Utworzenie obrazu zachowuje czytelne dane i umożliwia późniejsze skanowanie kopii, ograniczając liczbę wielokrotnych odwołań do problematycznego dysku.

Jeśli dyski pozostają na serwerze Linux i są czytelne, można je analizować zdalnie. W tym celu należy połączyć się z serwerem przez SSH w Hetman RAID Recovery i uzyskać dostęp do jego urządzeń blokowych.

Jak odzyskać usuniętą bazę danych MySQL z RAID 6 + LUKS2

KROK 1. Automatyczne wykrywanie RAID 6 i partycji LUKS

Bezpośrednio po uruchomieniu Hetman RAID Recovery automatycznie wykrył konfigurację MD RAID 6 i odtworzył jej strukturę do analizy.

Do odzyskiwania danych z uszkodzonych macierzy RAID, urządzeń NAS i innych wielodyskowych systemów pamięci masowej.
Hetman RAID Recovery: konfiguracja MD RAID 6

W prawym panelu wyświetlane są główne parametry macierzy: typ i stan RAID, kolejność i rozmiar bloków, a także lista uczestniczących dysków wraz z ich kolejnością, przesunięciami i rozmiarami.

Hetman RAID Recovery: konfiguracja MD RAID 6

Na złożonej macierzy program wykrył trzy partycje, w tym wcześniej usuniętą drugą, oraz zidentyfikował szyfrowanie LUKS na wszystkich trzech. Przed wprowadzeniem hasła ich systemy plików nie są wyświetlane — partycje muszą zostać odblokowane w celu dalszej analizy.

Druga partycja jest wyświetlana w interfejsie jako nieprzydzielone miejsce oznaczone LUKS. Oznacza to, że program rozpoznał metadane zaszyfrowanego kontenera w lokalizacji usuniętej partycji.

Hetman RAID Recovery: program wykrył trzy partycje na złożonej macierzy

KROK 2. Odblokowanie i odzyskiwanie usuniętych plików

Aby rozpocząć analizę, należy dwukrotnie kliknąć wymaganą partycję. Ponieważ jest ona zaszyfrowana za pomocą LUKS2, program poprosi o podanie hasła lub wskazanie pliku klucza. Wprowadź hasło i kliknij Unlock.

Hetman RAID Recovery: partycja jest zaszyfrowana za pomocą LUKS2

Najpierw wybierz Fast Scan. Poczekaj na zakończenie skanowania, po czym program otworzy strukturę odnalezionych katalogów. W naszym teście szybkie skanowanie odnalazło wymagane pliki na usuniętej partycji.

Jeśli w Twoim przypadku wymagane dane nie zostaną znalezione, wróć do wyboru typu analizy i uruchom Full Analysis, wskazując system plików EXT2/3/4.

Hetman RAID Recovery: wybierz Fast Scan

Przejrzyj wyniki skanowania. W naszym przypadku program wyświetlił zrzut SQL backup1.sql, katalog company_db oraz pliki tabel MySQL z rozszerzeniem .ibd. Zawartość zrzutu SQL można sprawdzić w oknie podglądu.

Hetman RAID Recovery: zrzut SQL backup1.sql, katalog company_db oraz pliki tabel MySQL

Zaznacz pliki i foldery, które chcesz odzyskać, a następnie kliknij Recovery. Wybierz metodę zapisu, wskaż inny dysk fizyczny i pozostaw włączoną opcję przywracania struktury katalogów.

Nie zapisuj znalezionych plików na tym samym dysku, z którego są odzyskiwane, aby nie nadpisać innych utraconych danych.

Hetman RAID Recovery: odzyskiwanie znalezionych plików

KROK 3. Odtwarzanie bazy danych z zrzutu SQL

Najprostszym sposobem przywrócenia bazy danych jest użycie odzyskanego zrzutu SQL. Zawiera on polecenia tworzące strukturę bazy danych i przywracające dane według stanu z chwili wykonania kopii zapasowej. Jeśli wybrano odpowiednie opcje eksportu, zrzut będzie również zawierał widoki, procedury i funkcje.

Uruchom MySQL Workbench i połącz się z serwerem MySQL. Otwórz menu Server — Data Import, wybierz Import from Self-Contained File i wskaż odzyskany plik SQL.

MySQL Workbench: Server — Data Import - Import from Self-Contained File

Jeśli utracono cały katalog mysql-data z plikami systemowymi MySQL, należy najpierw przywrócić działanie serwera lub przygotować nową instancję MySQL. Dopiero wtedy można zaimportować zrzut przez Workbench.

Wybierz docelowy schemat lub utwórz nową bazę danych company_db, a następnie kliknij Start Import. Poczekaj na zakończenie operacji i sprawdź dziennik pod kątem błędów.

MySQL Workbench: utwórz nową bazę danych company_db

Odśwież listę schematów. Baza danych powinna teraz zawierać tabele customers, products i orders. Otwórz je i zweryfikuj rekordy.

MySQL Workbench: tabele customers, products i orders

KROK 4. Odtwarzanie bazy danych z fizycznych plików MySQL

Jeśli nie ma odpowiedniego zrzutu SQL, ale Hetman RAID Recovery zdołał odzyskać katalog bazy danych z plikami tabel, można spróbować odzyskiwania fizycznego.

W naszym przypadku katalog company_db zachował pliki customers.ibd, products.ibd i orders.ibd. Każdy z nich zawiera dane i indeksy odpowiedniej tabeli InnoDB.

Pliki customers.ibd, products.ibd i orders.ibd

Samo skopiowanie tych plików do katalogu MySQL nie wystarczy. Nowy serwer nie ma jeszcze definicji odpowiednich tabel w słowniku danych. Dlatego odzyskiwanie przebiega w dwóch etapach: najpierw trzeba odtworzyć strukturę tabel, a następnie dołączyć do niej odzyskane pliki .ibd.

Aby wykonać odzyskiwanie, przygotuj działający serwer z tą samą wersją MySQL. Połącz się z nim przez Workbench i utwórz pustą bazę danych.

Połącz się z serwerem przez Workbench i utwórz pustą bazę danych

Jeśli zachował się oryginalny skrypt SQL ze strukturą, wykonaj z niego polecenia CREATE TABLE. Tabele muszą dokładnie odpowiadać oryginałowi, w tym typom kolumn, kluczom, indeksom, zestawowi znaków i formatowi wiersza. Nie ma potrzeby wykonywania poleceń wstawiania danych — na tym etapie tabele muszą pozostać puste.

KROK 5. Odtwarzanie struktury tabel z plików ibd

Jeśli oryginalny skrypt SQL nie jest dostępny, można spróbować odzyskać strukturę tabel z plików .ibd. W MySQL 8.0 zawierają one SDI — metadane słownika danych. Do ich odczytu służy narzędzie ibd2sdi.

Uruchom je dla każdego odzyskanego pliku i zapisz wyniki w formacie JSON. W naszym przypadku uzyskaliśmy metadane z plików customers.ibd, products.ibd i orders.ibd, a następnie użyliśmy jq, aby sprawdzić definicję tabeli customers.

ibd2sdi

Metadane mogą zawierać nazwę tabeli, wersję MySQL, silnik magazynowania, zestaw znaków oraz parametry tablespace. Zawierają również definicje kolumn. Informacje o kluczu głównym i kluczach unikalnych, indeksach wtórnych oraz relacjach z innymi tabelami są przechowywane oddzielnie.

Wygenerowany plik JSON można analizować ręcznie w edytorze tekstu. Na podstawie wykrytych parametrów specjalne skrypty i konwertery mogą automatycznie generować wstępne polecenia CREATE TABLE. W przypadku dużej liczby tabel znacząco przyspiesza to odzyskiwanie struktury.

Metadane mogą zawierać nazwę tabeli i wersję MySQL

KROK 6. Dołączanie odzyskanych plików ibd

W Workbench tymczasowo wyłącz sprawdzanie kluczy obcych i wykonaj polecenie ALTER TABLE … DISCARD TABLESPACE dla każdej utworzonej tabeli. Spowoduje to odłączenie utworzonej pustej przestrzeni tabeli i przygotuje tabelę do dołączenia odzyskanego pliku.

W Workbench tymczasowo wyłącz sprawdzanie kluczy obcych

Następnie skopiuj odpowiednie pliki .ibd do katalogu bazy danych na przygotowanym serwerze. Po skopiowaniu nie zapomnij nadać plikom właściciela mysql i ustawić wymaganych uprawnień dostępu.

Skopiuj odpowiednie pliki .ibd do katalogu bazy danych na przygotowanym serwerze

Wróć do Workbench i uruchom dla każdej tabeli polecenie ALTER TABLE … IMPORT TABLESPACE. Ostrzeżenia o brakujących plikach .cfg nie są krytyczne: MySQL kontynuuje import bez automatycznej weryfikacji struktury. MySQL zarejestruje odzyskane przestrzenie tabel i dołączy dane oraz indeksy do wcześniej utworzonych definicji tabel.

Wróć do Workbench i uruchom ALTER TABLE … IMPORT TABLESPACE

Po pomyślnym imporcie ponownie włącz sprawdzanie kluczy obcych. Odśwież listę schematów i zweryfikuj liczbę oraz zawartość rekordów za pomocą zapytań SELECT.

Po pomyślnym imporcie włącz sprawdzanie kluczy obcych

Pliki .ibd umożliwiają odtworzenie tabel, ich danych i indeksów. Jednak widoki, procedury i funkcje nie są przechowywane jako oddzielne pliki w katalogu company_db. Jeśli nie zostały uwzględnione w zrzucie SQL, obiekty te należy odtworzyć ręcznie.

Po zweryfikowaniu przywróconej bazy danych zalecamy utworzenie nowej kopii zapasowej w formacie SQL dump.

Wnioski

Za pomocą Hetman RAID Recovery udało się automatycznie odtworzyć strukturę Linux MD RAID 6 oraz wykryć i odblokować kontenery LUKS2 przy użyciu znanego hasła. Szybkie skanowanie odnalazło wymagane pliki zarówno po ich usunięciu, jak i po usunięciu całej partycji.

Odzyskany zrzut SQL można zaimportować przez MySQL Workbench, przywracając strukturę bazy danych i dane do stanu z chwili utworzenia kopii zapasowej. Jeśli odpowiedni zrzut nie jest dostępny, poszczególne tabele InnoDB można odzyskać z plików .ibd, uprzednio odtwarzając ich strukturę.

Oksana Volyniuk

Autor: , Pisarz techniczny

Oksana Volyniuk jest autorem pracującym w Hetman Software. Ma prawie trzyletnie doświadczenie w zakresie technologii IT, a wcześniej pracowała jako HR menedżer w IT kompanii. Oksana kocha technologię i jest zapalona tworzeniem każdego aktykułu, który może pomóć ludziom.

Michał Mirosznyczenko

Redaktor: , Pisarz techniczny

Michał Mirosznyczenko jest jednym z czołowych programistów firmy Hetman Software. Bazując na piętnastoletnim doświadczeniu w tworzeniu oprogramowania, dzieli się swoją wiedzą z czytelnikami naszego bloga. Oprócz programowania Michał jest ekspertem w dziedzinie odzyskiwania danych, systemów plików, urządzeń do przechowywania danych i macierzy RAID.

Rekomendujemy