Если вы MySQL DBA, вы наверняка делаете бэкапы. Но представьте ситуацию: вы потеряли все данные, кроме .ibd-файлов и некоторых файлов "по-умолчанию", связанных с InnoDB (ibdata1 и log-файлы). Как восстановить данные? Это возможно? Попробуем ответить в этой статье.
- Перед началом, установите значение innodb_force_recovery равным 5 в файле my.cnf (не обрабатывать undo-логи, когда запускаем базу данных и перевести InnoDB в режим read-only).
- Также включите innodb_file_per_table и не изменяйте (не применяйте touch) директорию базы в /var/lib/mysql.
- Перезапустите службу MySQL для пересоздания ibdata1, и подготовьте директорию с "бэкапом" вашей БД.
- Войдите в MySQL
- Создайте пустую базу с тем же именем.
- Создайте пустую таблицу с тем же именем, что и повреждённая (структурой таблицы можно пока пренебречь).
- Остановите службу MySQL и замените .frm-файл новой базы файлом из вашего бэкапа
- Запустите службу MySQL и убедитесь, что таблица восстановила свою структуру.
- Выполните комманду
SHOW CREATE TABLE
, скопируйте её содержимое и создайте табличку вместе с ней.
- Stop MySQL, copy the .ibd file from the backup directory to /var/lib/database_name and replace the existing .ibd file from the dummy table.
- Остановите службу MySQL и замените .frm-файл новой базы файлом из вашего бэкапа
- Установите Percona Data Recovery Tool for InnoDB, и выпоните следующую комманду:
ibdconnect -o /var/lib/mysql/ibdata1 -f /var/lib/mysql/database_name/table_name.ibd -d database_name -t table_name
, где -o
- полный путь к файлу ibdata1, -f
- полный путь к файлу .ibd, -d
- имя БД, -t
- имя таблицы.
- Запустите проверку чексуммы InnoDB и убедитесь, что вы не получаете ошибок (запускать утилиту нужно несколько раз):
innochecksum /var/lib/mysql/ibdata1
- Наконец, всё должно быть хорошо - просто запустите службу MySQL
Восстановление повреждённых табличек InnoDB не такая уж и сложная задача, как может показать на первый взгляд: вам просто нужно хорошо разбираться в MySQL и знать как пользоваться инструментарием Percona.
https://backup.ninja/news/recovering-orphaned-innodb-tables-guide