Как восстановить базу данных 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 Аппаратный 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

Каталог mysql-data был размещен на третьем разделе и содержал данные тестовой базы company_db, системные файлы и журналы MySQL. Использовалась MySQL version 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 с помощью функции Сохранить диск и сохранить на другом исправном накопителе.

Hetman RAID Recovery: Сохранить диск

Это особенно полезно, если диск нестабилен, имеет bad sectors или выдает ошибки чтения. Создание образа сохраняет читаемые данные и позволяет позже сканировать копию, уменьшая количество повторных обращений к проблемному диску.

Если диски остаются на 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, программа предложит ввести пароль или указать файл ключа. Введите пароль и нажмите Разблокировать.

Hetman RAID Recovery: раздел зашифрован LUKS2

Сначала выберите Быстрое сканирование. Дождитесь завершения сканирования, после чего программа откроет структуру найденных каталогов. В нашем тесте быстрое сканирование нашло нужные файлы на удаленном разделе.

Если в вашем случае нужные данные не будут найдены, вернитесь к выбору типа анализа и запустите Полный анализ, указав файловую систему EXT2/3/4.

Hetman RAID Recovery: выберите Быстрое сканирование

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

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

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

Не сохраняйте найденные файлы на тот же диск, с которого они восстанавливаются, чтобы не перезаписать другие утраченные данные.

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, механизм хранения, сопоставление и параметры tablespace. Они также содержат определения столбцов. Информация о первичных и уникальных ключах, вторичных индексах и связях с другими таблицами хранится отдельно.

Полученный JSON можно анализировать вручную в текстовом редакторе. На основе обнаруженных параметров специальные скрипты и конвертеры могут автоматически формировать предварительные команды CREATE TABLE. Для большого количества таблиц это значительно ускоряет восстановление структуры.

Метаданные могут включать имя таблицы и версию MySQL

ШАГ 6. Подключение восстановленных файлов ibd

В Workbench временно отключите проверки внешних ключей и выполните команду ALTER TABLE … DISCARD TABLESPACE для каждой созданной таблицы. Это отсоединит созданное пустое tablespace и подготовит таблицу к подключению восстановленного файла.

В Workbench временно отключите проверки внешних ключей

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

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

Вернитесь в Workbench и выполните ALTER TABLE … IMPORT TABLESPACE для каждой таблицы. Предупреждения об отсутствии файлов .cfg не критичны: MySQL продолжит импорт без автоматической проверки структуры. MySQL зарегистрирует восстановленные tablespace и подключит данные и индексы к ранее созданным определениям таблиц.

Вернитесь в Workbench и выполните ALTER TABLE … IMPORT TABLESPACE

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

После успешного импорта включите проверки внешних ключей

Файлы .ibd позволяют восстановить таблицы, их данные и индексы. Однако представления, процедуры и функции не хранятся как отдельные файлы в каталоге company_db. Если они не включены в SQL-дамп, эти объекты необходимо воссоздать вручную.

После проверки восстановленной базы данных рекомендуется создать новую резервную копию в формате SQL dump.

Вывод

С помощью Hetman RAID Recovery удалось автоматически восстановить структуру Linux MD RAID 6 и обнаружить, а также разблокировать контейнеры LUKS2 с использованием известного пароля. Быстрое сканирование позволило найти нужные файлы как после их удаления, так и после удаления всего раздела.

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

Dmytriy Zhura

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

Дмитрий Жура – автор и один из IT-инженеров компании Hetman Software. Имеет почти 10 летний опыт работы в IT-сфере: администрирование и настройка серверов, установка операционных систем и различного программного обеспечения, настройка сети, информационная безопасность, внедрения и консультация по использованию специализированного ПО. Является экспертом в области восстановления данных, файловых систем, устройств хранения данных и RAID массивов.

Andrey Mareev

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

В далеком 2005 году, я получил диплом по специальности «Прикладная математика» в Восточноукраинском национальном университете. А уже в 2006 году, я создал свой первый проект по восстановлению данных. С 2012 года, начал работать в компании «Hetman Software», отвечая за раскрутку сайта, продвижение программного обеспечения компании, и как специалист по работе с клиентами.

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