Восстановление базы данных InnoDB
// апреля 20, 2010 // Один комментарий // Инструкции
Написал я небольшой скрипт, который использует базу данных. При заливке на сервер случайно перезалил таблицу data в существующей базе данных. Как видно из названия таблица важная) Бекапов не было, поэтому сделал запрос хостеру. Но тут возникла проблема, бекапы баз данных делались простым копированием всех файлов и папок из таблицы данных. Для таблиц типа MyISSAM такой способ подходит, но для InnoDB это не совсем подходит.
Для восстановления базы была запрошена папка с таблицами (файлы типа *.frm) и файл данных ibdata1. Кстати последний весил 300 мб в архиве, видимо там лежало еще много чужих баз. Файлы от базы копирую на локальный сервер, запускаю. База данных появилась в списке, но данные с таблиц были недоступны, при запросе SELECT вылетала ошибка “Table is empty”. Команды типа CHECK или REPAIR не помогали.
База данных была спасена с помощью строки innodb_force_recovery=6 добавленную в файл конфигурации и перезапуска сервера. После старта винт затрещал и через несколько минут к базе можно было обращаться. После скачивания дампа необходимо убрать вышеуказанную строку.
На случай вопросов тех, кто попадет на эту страницу в поисках решения похожей проблемы сразу говорю, что если у вас нет файла данных от InnoDB, то базу вы восстановить не сможете.
Так же добавлю, что самый правильный способ делать бекап баз – это получать их дампы, а не файлы от базы.