В один прекрасный день пришел на работу и заметил,что не работает 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 заработал (но это был далеко не конец,но об этом в другой записи)