Все бывает в первый раз. Вот и вчера, привычно потушил 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/