Восстановление работоспособности MySql после отключения питания (Проблема с InnoDb)

В один прекрасный день пришел на работу и заметил,что не работает zabbix. Ошибка указывала на то, что MySql был отключен. Дело было после выходных,а отключение электроэнергии на длительное время для нашего небольшого города не редкость. Заметив, что отключение было в выходные решил перезапустить сервер. Перезапуск сервера MySql выводил следующее сообщение:

/etc/init.d/mysqld restart
Stopping mysqld:                                       [OK]
Starting mysqld:                                     [FAILED]

Странно,подумал я — еще вчера все работало,ничего не трогал,а тут-на тебе. Первым делом проверил,не занимает ли что-нибудь 3306 порт. Но это не помогло. Продолжение читайте под катом.

Мой конфиг MySql представлял из себя следующее(дополнительно в него innodb_force_recovery=1):

[mysqld]
datadir=/var/lib/mysql/
socket=/var/lib/mysql/mysql.sock
innodb_force_recovery=1
[mysql.server]
user=mysql
basedir=/var/lib/mysql

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
socket=/var/lib/mysql/mysql.sock

Перезапустил сервер-результата нет. Полез смотреть логи и обратил внимание на следующее:

140529 17:51:45 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 2073802258
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 4 row operations to undo
InnoDB: Trx id counter is 4B7600
140529 17:51:45 InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
InnoDB: Apply batch completed
140529 17:51:45 InnoDB: Waiting for the background threads to start
InnoDB: Starting in background the rollback of uncommitted transactions
140529 17:51:45 InnoDB: Rolling back trx with id 4B7401, 4 rows to undo
140529 17:51:45 InnoDB: Assertion failure in thread 2809133936 in file fut0lst.ic line 83
InnoDB: Failing assertion: addr.page == FIL_NULL || addr.boffset >= FIL_PAGE_DATA

В результате поиска решения проблемы строка конфига MySql:

innodb_force_recovery=1

Была заменена на:

innodb_force_recovery=6

После этого я смог успешно перезапустить сервер и mysql заработал (но это был далеко не конец,но об этом в другой записи)

Понравилась статья? Поделиться с друзьями: