Восстановление базы INNODB
Рассмотрим неприятную ситуация, когда вследствие отключения сервера по питанию, была поломана база Mysql с таблицами InnoDB. Это может произойти, например, в случае отключения сервера по питанию или некорректного завершения процесса mysql с вылетом в OOM.
В логах при попытке запуска появляются такие сообщения:
База не запускается. Пробуем сделать дамп базы и смотрим на какой таблице запнулись. Когда дамп пройдет без ошибок, это означает успех.
Ремонт:
В /etc/mysql/my.cnf устанавливаем innodb_force_recovery=3 и запускаем Mysql. В данном режиме нам предоставилась возможность запустить Innodb, но делать с ней практически ничего нельзя. Все сервисы следует остановить, база должна быть максимально свободна.
Создаем рядом такую же таблицу только в формате MyISAM.
Перегоняем из старой таблицы в новую все что возможно вытащить. Интервалы подбираем так, чтобы сохранить данные.
Как только сохранили все что возможно, дропаем table. Если не получается обычным дропом, пробуем сдампить базу без таблицы и попробовать дропнуть базу. Если не получается и так, удаляем frm-файл и стартуем сервис.
После восстановления и успешного дампа убираем строчку в my.cnf и продолжаем работу в штатном режиме.
В логах при попытке запуска появляются такие сообщения:
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 свернуть / развернуть