Восстановление базы INNODB

Рассмотрим неприятную ситуация, когда вследствие отключения сервера по питанию, была поломана база Mysql с таблицами InnoDB. Это может произойти, например, в случае отключения сервера по питанию или некорректного завершения процесса mysql с вылетом в OOM.

В логах при попытке запуска появляются такие сообщения:
Apr 29 10:43:16 vps03005 mysqld[10332]: InnoDB: Database page corruption on disk or a failed
Apr 29 10:43:16 vps03005 mysqld[10332]: InnoDB: file read of page 419.
Apr 29 10:43:16 vps03005 mysqld[10332]: InnoDB: You may have to recover from a backup.
Apr 29 10:43:16 vps03005 mysqld[10332]: InnoDB: It is also possible that your operating
Apr 29 10:43:16 vps03005 mysqld[10332]: InnoDB: system has corrupted its own file cache
Apr 29 10:43:16 vps03005 mysqld[10332]: InnoDB: and rebooting your computer removes the
Apr 29 10:43:16 vps03005 mysqld[10332]: InnoDB: error.


База не запускается. Пробуем сделать дамп базы и смотрим на какой таблице запнулись. Когда дамп пройдет без ошибок, это означает успех.

Ремонт:
В /etc/mysql/my.cnf устанавливаем innodb_force_recovery=3 и запускаем Mysql. В данном режиме нам предоставилась возможность запустить Innodb, но делать с ней практически ничего нельзя. Все сервисы следует остановить, база должна быть максимально свободна.
Создаем рядом такую же таблицу только в формате MyISAM.
create table table_tmp LIKE table


Перегоняем из старой таблицы в новую все что возможно вытащить. Интервалы подбираем так, чтобы сохранить данные.
insert ignore into table_tmp SELECT * from table where id>=185000 and id<187000;


Как только сохранили все что возможно, дропаем table. Если не получается обычным дропом, пробуем сдампить базу без таблицы и попробовать дропнуть базу. Если не получается и так, удаляем frm-файл и стартуем сервис.

После восстановления и успешного дампа убираем строчку в my.cnf и продолжаем работу в штатном режиме.
  • 0
  • 29 апреля 2013, 13:06
  • LSD

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.