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

Опубликовано:

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

В логах при попытке запуска появляются такие сообщения:

mysqld[10332]:InnoDB:Database page corruption on disk or a failed
mysqld[10332]:InnoDB: file read of page 419.
mysqld[10332]:InnoDB:You may have to recover from a backup.
mysqld[10332]:InnoDB:Itis also possible that your operating
mysqld[10332]:InnoDB: system has corrupted its own file cache
mysqld[10332]:InnoDB:and rebooting your computer removes the
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>=185000and id<187000;

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

После восстановления и успешного дампа убираем строчку в my.cnf и продолжаем работу в штатном режиме.

Понравилась статья, расскажи о ней друзьям, нажми кнопку!