апреля 20, 2010

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

logo_mysql20060216Написал я небольшой скрипт, который использует базу данных. При заливке на сервер случайно перезалил таблицу data в существующей базе данных. Как видно из названия таблица важная) Бекапов не было, поэтому сделал запрос хостеру. Но тут возникла проблема, бекапы баз данных делались простым копированием всех файлов и папок из таблицы данных. Для таблиц типа MyISSAM такой способ подходит, но для InnoDB это не совсем подходит.

Для восстановления базы была запрошена папка с таблицами (файлы типа *.frm) и файл данных ibdata1. Кстати последний весил 300 мб в архиве, видимо там лежало еще много чужих баз. Файлы от базы копирую на локальный сервер, запускаю. База данных появилась в списке, но данные с таблиц были недоступны, при запросе SELECT вылетала ошибка “Table is empty”. Команды типа CHECK или REPAIR не помогали.

База данных была спасена с помощью строки innodb_force_recovery=6 добавленную в файл конфигурации и перезапуска сервера. После старта винт затрещал и через несколько минут к базе можно было обращаться. После скачивания дампа необходимо убрать вышеуказанную строку.

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

Так же добавлю, что самый правильный способ делать бекап баз – это получать их дампы, а не файлы от базы.

Теги: ,

Опубликовано в: Инструкции

2 комментария

Когда-то была похожая ситуация с дампом одной игры. Бекам всего VPS был а вод дамп был старый на 2-е суток, но там тип был как раз MyISSAM поэтому обошлось. На всякий случай отметил себе что с InnoDB если что делать.

СПАСИБО!!!
ПОМОГЛО!!! :)

Ваш комментарий

Сумма 5 + 6 ?

Реклама

jls

Счетчики