Возникла у меня проблема с выходом из строя баз данных MySQL. Причем, проблема проявляла себя в виде не запуска сервиса MySQL. При этом в логах довольно было мало информации. Однако, запустив mysql_safe все таки логи выдали ошибки. Из которых стало понятно, что база несколько испортилась (до этого пришлось физически выключать сервер, т.к. сервис MySQL завис от количества посещений и сервер длительное время не хотел перезагружаться).
Провозившись несколько часов вывелся рецепт лечения:
Лог ошибок может выдавать в случае сбоя нечто подобное:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/usr/sbin/mysqld(my_print_stacktrace+0x2b)[0x7f07f966ee0b] /usr/sbin/mysqld(handle_fatal_signal+0x475)[0x7f07f91cf055] /lib64/libpthread.so.0(+0x3d6700f7e0)[0x7f07f87d57e0] /lib64/libc.so.6(gsignal+0x35)[0x7f07f6bfc625] /lib64/libc.so.6(abort+0x175)[0x7f07f6bfde05] mysys/stacktrace.c:247(my_print_stacktrace)[0x7f07f937d7cf] log/log0recv.cc:1751(recv_recover_page_func(unsigned long, buf_block_t*))[0x7f07f9380034] buf/buf0buf.cc:4820(buf_page_io_complete(buf_page_t*))[0x7f07f948183a] fil/fil0fil.cc:6084(fil_aio_wait(unsigned long))[0x7f07f94dc7f8] srv/srv0start.cc:543(io_handler_thread)[0x7f07f940db10] /lib64/libpthread.so.0(+0x3d67007aa1)[0x7f07f87cdaa1] /lib64/libc.so.6(clone+0x6d)[0x7f07f6cb293d] The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash. 160626 07:23:45 mysqld_safe mysqld from pid file /var/lib/mysql/ovz1.valerka2.zm9y1.vps.jino.ru.pid ended |
Отправляет в документацию по восстановлению :)))
1. Переводим сервис в защищенный режим MySQL.
Останавливаем сервис, если он пытается запуститься.
1 |
service mysql stop |
Далее, добавляем строчки в конфиг MySQL my.cnf:
1 2 3 |
port = 8881 innodb_force_recovery=3 innodb_purge_threads=0 |
Причем, параметр innodb_force_recovery=3 увеличиваем, начиная с 1 и так до тех пор, пока не запустится сервис (максимум это значение может быть 8).
Вот, что означает этот параметр:
- Mode 1 — не «отваливается» MySQL, когда он видит коррумпированные страницы.
- Mode 2 — не запускает фоновые операции.
- Mode 3 — Не пытается откатить транзакции.
- Mode 4 — не рассчитывает статистику или не применяет сохраненные/буферизированные изменения.
- Mode 5 — Не смотрите на log-и отката при запуске.
- Mode 6 — Не прокрутки вперед от повтора логов (ib_logfiles) во время пуска.
2. Делаем бекап всех данных базы данных (после запуска сервера).
1 |
mysqldump -u root -p --opt --all-databases -r backup.sql |
3. Переименовываем всю папку с данными MySQL (потом, когда все заработает – ее можно будет удалить)
4. Разворачиваем новый кластер MySQL.
Как это делается, описано в статье:
Инициализация базы данных MySQL, сброс пароля MySQL на Linux Ubuntu 18.04
5. Запускаем MySQL и восстанавливаем данные:
1 2 |
mysql -u root -p >>source backup.sql |
6. Перезагружаем сервис MySQL, чтоб обновились права (можно, конено, просто сделать flush прав, но как по мне, перезагрузка – надежней).
1 |
service mysql restart |
Еще полезные статьи по теме не запуска сервиса MySQL:
https://losst.ru/ne-zapuskaetsya-mysql
Leave a Reply