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

Все бывает в первый раз. Вот и вчера, привычно потушил mysql, привычно запустил… и она не запустилась.
В логах при этом нашел сперва много вот таких строк:

[Warning] /usr/sbin/mysqld: Forcing close of thread 77 user: ‘zabbix’

а потом вот это:

вот в этом месте и пришло осознание…. приехали.

В общем никакие танцы с бубном не помогали, по этому сразу к решению.

Сперва внимательно читаем сюда: http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html. Затем делаем копию всего содержимого /var/lib/mysql в надежное место, т.к. следующий шаг может сильно повредить данные. После этого, добавляем в конфиг /etc/mysql/my.cnf строку:

innodb_force_recovery = 6

Теперь запускаем mysql и делаем бэкап необходимых баз, например так:

mysqldump -u root -p zabbix > /home/serp/backup.sql

Когда все базы сохранены, останавливаем mysql, удаляем его с сервера (в моем случае aptitude purge mysql-server-5.5), удаляем все из директории /var/lib/mysql, а затем ставим все обратно. Естесственно, что придется снова создать базы и пользователей для них (желательно с теми же паролями, которые были раньше, что б не править конфиги. В моем случае, что б не перенастраивать zabbix), а потом уже восстановить дампы. Дамп можно восстановить например вот так:

mysql -u root -p zabbix < /home/serp/backup.sql

Не забудте закомментировать опцию innodb_force_recovery в конфиге.

Thanx to Egil Fujikawa http://egil.biz/how-to-recover-mysql-data-from-innodb/

Добавить комментарий

Войти с помощью: