Восстановление баз данных InnoDB после сбоев в MySQL

Возникла у меня проблема с выходом из строя баз данных MySQL. Причем, проблема проявляла себя в виде не запуска сервиса MySQL. При этом в логах довольно было мало информации. Однако, запустив mysql_safe все таки логи выдали ошибки. Из которых стало понятно, что база несколько испортилась (до этого пришлось физически выключать сервер, т.к. сервис MySQL завис от количества посещений и сервер длительное время не хотел перезагружаться).

Провозившись несколько часов вывелся рецепт лечения:

Лог ошибок может выдавать в случае сбоя нечто подобное:

Отправляет в документацию по восстановлению :)))

1. Переводим сервис в защищенный режим MySQL.

Останавливаем сервис, если он пытается запуститься.

Далее, добавляем строчки в конфиг MySQL my.cnf:

Причем, параметр innodb_force_recovery=3 увеличиваем, начиная с 1 и так до тех пор, пока не запустится сервис (максимум это значение может быть 8).

Вот, что означает этот параметр:

  1. Mode 1 — не «отваливается» MySQL, когда он видит коррумпированные страницы.
  2. Mode 2 — не запускает фоновые операции.
  3. Mode 3 — Не пытается откатить транзакции.
  4. Mode 4 —  не рассчитывает статистику или не применяет сохраненные/буферизированные изменения.
  5. Mode 5 —  Не смотрите на log-и отката при запуске.
  6. Mode 6 — Не прокрутки вперед от повтора логов (ib_logfiles) во время пуска.

2. Делаем бекап всех данных базы данных (после запуска сервера).

3. Переименовываем всю папку с данными MySQL (потом, когда все заработает – ее можно будет удалить)

4. Разворачиваем новый кластер MySQL.

Как это делается, описано в статье:

Инициализация базы данных MySQL, сброс пароля MySQL на Linux Ubuntu 18.04

5. Запускаем MySQL и восстанавливаем данные:

6. Перезагружаем сервис MySQL, чтоб обновились права (можно, конено, просто сделать flush прав, но как по мне, перезагрузка – надежней).

 

 

Еще полезные статьи по теме не запуска сервиса MySQL:

https://losst.ru/ne-zapuskaetsya-mysql

Исправляем поврежденные INNODB таблицы

 

 

 

 

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*