Як відновити базу MySQL після видалення файлів або розділу в Ubuntu: RAID 6 і LUKS2

Видалення файлів або цілого розділу диска в Ubuntu може призвести до критичної втрати даних, особливо якщо на сервері працює база даних MySQL. Ситуація стає значно складнішою, коли система зберігання побудована на масиві RAID 6, а дані додатково захищені шифруванням LUKS2. У таких умовах стандартні інструменти відновлення не завжди дають очікуваний результат, а необережні дії можуть остаточно знищити інформацію. У цій статті розглянемо можливі сценарії втрати даних, особливості роботи з RAID 6 і LUKS2, а також процес відновлення бази MySQL після випадкового видалення файлів або розділу диска.

Як відновити базу MySQL після видалення файлів або розділу в Ubuntu: RAID 6 і LUKS2

Файли бази даних MySQL та її резервні копії на Linux-сервері можуть стати недоступними з різних причин: випадкове видалення файлів, форматування або видалення розділу, пошкодження файлової системи, збій RAID-масиву, відмова дисків чи RAID-контролера. Ситуація додатково ускладнюється, якщо дані зберігаються на зашифрованому LUKS2-розділі.

Hetman RAID Recovery допомагає відтворити структуру RAID-масивів, знайти втрачені розділи, розблокувати LUKS2 за наявності пароля та відновити файли бази даних і SQL-дампи.

Роботу програми продемонструємо на комп’ютері з Windows. При цьому Hetman RAID Recovery також доступна для Linux і macOS.

Перейти до перегляду
Як відновити видалену базу MySQL із RAID 6 + LUKS2 (Ubuntu)

Як відновити видалену базу MySQL із RAID 6 + LUKS2 (Ubuntu)

Підготовка тестового середовища та бази MySQL

Для тестування ми використали сервер Dell PowerEdge R710 із контролером PERC H700.

Параметр Характеристика
Модель сервера Dell PowerEdge R710
Формфактор Rack 2U
Процесор До 2 × Intel Xeon серій 5500/5600
Оперативна пам’ять DDR3 ECC, до 288 ГБ (18 слотів)
RAID-контролер Dell PERC H700
Тип RAID Апаратний (Hardware RAID)
Підтримувані RAID-рівні RAID 0, 1, 5, 6, 10, 50, 60
Конфігурація масиву RAID 6
Інтерфейс накопичувачів SAS/SATA, до 6 Гбіт/с
Кількість дискових відсіків До 6 × 3,5″ або 8 × 2,5″ залежно від конфігурації
Кеш RAID-контролера 512 МБ або 1 ГБ (залежно від модифікації)
Захист кешу BBU — резервне живлення кешу від батареї
Операційна система Ubuntu Server
Шифрування даних LUKS2 (на рівні Linux, не RAID-контролера)
Система керування базами даних MySQL
Відмовостійкість RAID 6 Допускає одночасну відмову до двох дисків
Інструменти діагностики Dell OpenManage, MegaCLI, StorCLI (за сумісності)

Щоб надати операційній системі прямий доступ до кожного фізичного диска, на контролері створили шість однодискових масивів RAID 0 — по одному для кожного диска. На одному встановили Ubuntu Server 24.04, а чотири інші об’єднали в програмний масив MD RAID 6 через Cockpit.

На масиві створили таблицю розділів GPT і три розділи, для кожного вибравши файлову систему ext4 та шифрування LUKS2.

MDRAID Device

На третьому розділі розмістили каталог mysql-data з даними тестової бази company_db, системними файлами та журналами MySQL. Використали MySQL версії 8.0.46.

Каталог mysql-data з даними тестової бази company_db

Сама база містила таблиці customers, products і orders, а також представлення, збережену процедуру та функцію.

База містить таблиці customers, products і orders

Резервну копію бази створили в MySQL Workbench у форматі SQL-дампа та зберегли в каталозі mysql-backups.

Перед тестуванням каталоги mysql-data і mysql-backups скопіювали з третього розділу на другий. Потім другий розділ видалили через Cockpit, а з третього видалили файли бази даних і SQL-дамп за допомогою Shift + Delete, оминаючи кошик. Так підготували два сценарії: відновлення файлів із видаленого розділу та відновлення видалених файлів зі збереженого розділу.

Другий розділ видалили через Cockpit

Підключення дисків для аналізу

У нашому випадку диски-учасники RAID 6 підключили до комп’ютера з Windows через USB-док-станцію та запустили Hetman RAID Recovery для аналізу.

Для відновлення даних із пошкоджених RAID-масивів, NAS-пристроїв та інших багатодискових систем зберігання.

Окрім роботи з фізичними дисками, програма підтримує аналіз їхніх повних побайтових образів. Створити такі образи можна безпосередньо в Hetman RAID Recovery за допомогою функції Save Disk, зберігши їх на іншому справному накопичувачі.

Hetman RAID Recovery: Save Disk

Це особливо корисно, якщо диск працює нестабільно, має пошкоджені сектори або помилки читання. Створення образу дозволяє зберегти доступні для зчитування дані та надалі сканувати копію, зменшуючи кількість повторних звернень до проблемного диска.

Якщо диски залишаються на Linux-сервері й доступні для читання, їх можна аналізувати віддалено. Для цього підключіться до сервера через SSH у Hetman RAID Recovery та отримайте доступ до його блокових пристроїв.

Як відновити видалену базу MySQL із RAID 6 + LUKS2

КРОК 1. Автоматичне визначення RAID 6 і розділів LUKS

Відразу після запуску Hetman RAID Recovery автоматично визначила конфігурацію MD RAID 6 і відтворила його структуру для аналізу.

Для відновлення даних із пошкоджених RAID-масивів, NAS-пристроїв та інших багатодискових систем зберігання.
Hetman RAID Recovery: конфігурація MD RAID 6

У правій панелі відображаються основні параметри масиву: тип і стан RAID, порядок і розмір блоків, а також список дисків-учасників із зазначенням їхньої послідовності, зміщень і розмірів.

Hetman RAID Recovery: конфігурація MD RAID 6

На зібраному масиві програма виявила три розділи, зокрема раніше видалений другий, і розпізнала шифрування LUKS на всіх трьох. До введення пароля їхні файлові системи не відображаються — для подальшого аналізу потрібно розблокувати розділи.

Другий розділ показано в інтерфейсі як нерозподілений простір із позначкою LUKS. Це означає, що програма розпізнала службові дані зашифрованого контейнера на місці видаленого розділу.

Hetman RAID Recovery: на зібраному масиві програма виявила три розділи

КРОК 2. Розблокування та відновлення видалених файлів

Щоб запустити аналіз, двічі клацніть потрібний розділ. Оскільки він зашифрований за допомогою LUKS2, програма запропонує ввести пароль або вказати файл ключа. Введіть пароль і натисніть Unlock.

Hetman RAID Recovery: розділ зашифрований за допомогою LUKS2

Спочатку виберіть Fast Scan. Дочекайтеся завершення сканування, після чого програма відкриє структуру знайдених каталогів. У нашому тесті швидке сканування знайшло потрібні файли на видаленому розділі.

Якщо у вашому випадку потрібні дані не знайдено, поверніться до вибору типу аналізу та запустіть Full Analysis, указавши файлову систему EXT2/3/4.

Hetman RAID Recovery: виберіть Fast Scan

Перегляньте результати сканування. У нашому випадку програма відобразила SQL-дамп backup1.sql, каталог company_db і файли таблиць MySQL із розширенням .ibd. Вміст SQL-дампа можна перевірити у вікні попереднього перегляду.

Hetman RAID Recovery: SQL-дамп backup1.sql, каталог company_db і файли таблиць MySQL

Позначте файли та папки, які потрібно відновити, і натисніть Recovery. Виберіть спосіб збереження, вкажіть інший фізичний диск і залиште активною опцію відновлення структури каталогів.

Не зберігайте знайдені файли на носій, з якого вони відновлюються, щоб не перезаписати інші втрачені дані.

Hetman RAID Recovery: відновлення знайдених файлів

КРОК 3. Відновлення бази з SQL-дампа

Найпростіший спосіб повернути базу — це використати відновлений SQL-дамп. Він містить команди для створення структури бази та відновлення даних станом на момент створення копії. Якщо під час експорту були вибрані відповідні параметри, дамп також міститиме представлення, процедури та функції.

Запустіть MySQL Workbench і підключіться до сервера MySQL. Відкрийте меню Server — Data Import, виберіть Import from Self-Contained File та вкажіть відновлений SQL-файл.

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

Якщо втрачено весь каталог mysql-data із системними файлами MySQL, то спочатку потрібно відновити працездатність сервера або підготувати новий екземпляр MySQL. Лише після цього можна імпортувати дамп через Workbench.

Виберіть цільову схему або створіть нову базу company_db, після чого натисніть Start Import. Дочекайтеся завершення операції та перевірте журнал на наявність помилок.

MySQL Workbench: створіть нову базу company_db

Оновіть список схем. У базі мають з’явитися таблиці customers, products і orders. Відкрийте їх та перевірте записи.

MySQL Workbench: таблиці customers, products і orders

КРОК 4. Відновлення бази з фізичних файлів MySQL

Якщо придатного SQL-дампа немає, але Hetman RAID Recovery вдалося повернути каталог бази з файлами таблиць, то можна спробувати фізичне відновлення.

У нашому випадку в каталозі company_db збереглися файли customers.ibd, products.ibd та orders.ibd. Кожен із них містить дані й індекси відповідної InnoDB-таблиці.

Файли customers.ibd, products.ibd та orders.ibd

Простого копіювання цих файлів до каталогу MySQL недостатньо. Новий сервер ще не має описів відповідних таблиць у словнику даних. Тому відновлення складається з двох етапів: спочатку потрібно відтворити структуру таблиць, а потім підключити до них знайдені файли .ibd.

Для відновлення підготуйте працездатний сервер із тією самою версією MySQL. Підключіться до нього через Workbench і створіть порожню базу.

Підключіться до сервера через Workbench і створіть порожню базу

Якщо зберігся початковий SQL-скрипт зі структурою, виконайте з нього команди CREATE TABLE. Таблиці мають точно відповідати початковим, включно з типами стовпців, ключами, індексами, кодуванням і форматом рядків. Команди додавання даних виконувати не потрібно — на цьому етапі таблиці мають залишатися порожніми.

КРОК 5. Відновлення структури таблиць з ibd файла

Якщо початкового SQL-скрипту немає, то структуру таблиць можна спробувати відновити з файлів .ibd. У MySQL 8.0 вони містять SDI — службові метадані словника даних. Для їхнього читання використовується утиліта ibd2sdi.

Запустіть її для кожного відновленого файла та збережіть результати у форматі JSON. У нашому випадку ми отримали метадані з customers.ibd, products.ibd та orders.ibd, а потім за допомогою jq переглянули опис таблиці customers.

ibd2sdi

У метаданих можна знайти назву таблиці, версію MySQL, тип сховища, кодування, зіставлення та параметри табличного простору. Вони також містять опис стовпців. Окремо зберігається інформація про первинні й унікальні ключі, звичайні індекси та зв’язки з іншими таблицями.

Отриманий JSON можна проаналізувати вручну в текстовому редакторі. На основі знайдених параметрів спеціальні скрипти й конвертери можуть автоматично сформувати попередні команди CREATE TABLE. Для великої кількості таблиць це значно пришвидшує відновлення структури.

У метаданих можна знайти назву таблиці, версію MySQL

КРОК 6. Підключення відновлених ibd-файлів

У Workbench тимчасово вимкніть перевірку зовнішніх ключів і для кожної створеної таблиці виконайте команду ALTER TABLE … DISCARD TABLESPACE. Вона від’єднає створений порожній табличний простір і підготує таблицю до підключення відновленого файла.

У Workbench тимчасово вимкніть перевірку зовнішніх ключів

Після цього скопіюйте відповідні .ibd-файли до каталогу бази на підготовленому сервері. Після копіювання не забудьте призначити файлам власника mysql і встановити необхідні права доступу.

Скопіюйте відповідні .ibd-файли до каталогу бази на підготовленому сервері

Поверніться до Workbench та виконайте ALTER TABLE … IMPORT TABLESPACE для кожної таблиці. Попередження про відсутність .cfg не є критичними: MySQL продовжить імпорт без автоматичної перевірки структури. MySQL зареєструє відновлені табличні простори й підключить дані та індекси до створених раніше описів таблиць.

Поверніться до Workbench та виконайте ALTER TABLE … IMPORT TABLESPACE

Після успішного імпорту знову ввімкніть перевірку зовнішніх ключів. Оновіть список схем і перевірте кількість та вміст записів за допомогою запитів SELECT.

Після успішного імпорту ввімкніть перевірку зовнішніх ключів

Файли .ibd дозволяють повернути таблиці, їхні дані та індекси. Проте представлення, процедури й функції не зберігаються окремими файлами в каталозі company_db. Якщо їх немає в SQL-дампі, ці об’єкти доведеться створити повторно.

Після перевірки відновленої бази рекомендуємо створити нову резервну копію у форматі SQL-дампа.

Висновок

За допомогою Hetman RAID Recovery вдалося автоматично відтворити структуру Linux MD RAID 6, розпізнати й розблокувати контейнери LUKS2 за відомим паролем. Швидке сканування знайшло потрібні файли як після їх видалення, так і після видалення цілого розділу.

Відновлений SQL-дамп можна імпортувати через MySQL Workbench, повернувши структуру й дані бази станом на момент створення резервної копії. Якщо придатного дампа немає, окремі InnoDB-таблиці можна спробувати відновити з файлів .ibd, попередньо відтворивши їхню структуру.

Valery Martyshko

Автор: , Технічний письменник

Автор, перекладач та технічний спеціаліст компанії Hetman Software. Має майже десятирічний досвід роботи в IT сфері, який охоплює різні галузі: від ПК з Windows та мобільних пристроїв, до фото та відео обладнання, сигналізацій та систем відеоспостереження, і т.д. Окрім іншого, є також спеціалістом по Android, Windows та Microsoft Office. Є експертом в області відновлення даних, файлових систем, пристроїв зберігання даних, RAID масивів.

Vladyslav Kupriyenko

Редактор: , Технічний письменник

Редактор статей блогу, автор та ведучий рубрики на YouTube каналі компанії Hetman Software. За освітою: спеціаліст з обслуговування комп’ютерних систем та мереж, вивчав розробку програмного забезпечення. Має досвід роботи в IT сфері, який охоплює різні галузі: адміністрування комп’ютерної мережі та обладнання, контроль та підтримка роботи Інтернет, офісних та спеціалізованих програм. Є фахівцем в області відновлення даних, файлових систем та пристроїв зберігання даних.

Рекомендуємо для вас