Восстановление базы данных MySQL из ib_logfile

Восстановление базы данных MySQL из ib_logfile приходится делать, когда случилось страшное — на сервере сдохли оба файловых массива. Случай редкий, но бывает, что 8 хардов разом накрылись. Точнее накрылись они как-то избирательно. В итоге, вместо дампа базы данных остался только каталог /var/lib/mysql, в котором хранятся каталоги со схемой баз и log файлы ib_logfile. Из этого месива нужно восстановить одну, но очень важную базу. Как ни странно, на большинстве отечественных админских ресурсах народ утверждает, что восстановить базу в такой ситуации практически нереально. Некоторое количество экспериментов и курение официальной доки показало обратное — восстановить можно и без каких-либо потерь.

Подготовка к восстановлению

Поскольку операционке на сервере каюк, с горем пополам выдираем из поврежденных дисковых массивов каталог с базой. Если говорить о Linux Debian базы данных MySQL лежат в каталоге: /var/lib/mysql.

На мертвом сервере стояла версия MySQL 5.0.24. Я скачал 5.0.96 — не думаю, что между ними принципиальная разница есть.

Соответственно, устанавливаем на свой комп. Восстановление я делал под управлением Windows.

Если установили и настроили как сервис, то этот сервис следует остановить. То же касается и демона под Линуксом.

Восстановление данных

Копируем содержимое каталога mysql в каталог данных нашего нового сервера. В моем случае данные располагаются в

C:\Program Files (x86)\MySQL\MySQL Server 5.0\data

Если вы восстановление будете делать под Линуксом, то каталог данных будет находиться

/var/lib/mysql

По крайней мере это касается дистрибутивов Debian и Ubuntu.

Теперь запускаем наш сервер в режиме восстановления. В Windows файл mysqld-nt.exe, в Linux — mysqld:

mysqld-nt --innodb_log_file_size=536870912 --innodb_force_recovery=6

Важно правильно указать значение параметра —innodb_log_file_size. Его значение должно быть равно размеру ваших фалов ib_logfile.

После некоторого раздумья сервер должен стать доступным для подключения.

Нужную базу дампим и заливаем на нормальный новый сервер:

mysqldump database-name --user=db-user --password=db-password > database.sql

Восстановление базы данных MySQL из ib_logfile успешно завершено!

Для тех, кто в танке: файл дампа восстанавливается нормально на любой операционной системе. Никак его перекодировать не нужно!

2 комментария(ев) для “Восстановление базы данных MySQL из ib_logfile

  1. Добрый день! Спасибо за статью. Но имеется вопрос по этому делу. Что делать, если ib_logfile и помер(ли). У меня на руках только папка с БД (*.frm, *.myd, *.myi, db.opt) и ib_data1, вообщем всё, кроме как раз таки ib_logfile.

    1. При повреждении LOG файла восстановление тоже возможно, но с потерей части данных. Все последние изменения, скорее всего будут утеряны. Объем потери зависит от настройки вашего сервера в части ведения журнала.

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

      Предварительно только сделайте полную копию каталога.

Комментарии запрещены.