Восстановление MySQL InnoDB после отключения электропитания

Однажды после того как отключилось электропитание, розрядились UPS, потом не сработала автоматика запуска генератора из-за чего он включался и выключался несколько раз, в итоге сервер с MySQL тоже несколько раз был запущен и отключен от электропитания, в последствии были повреждены таблицы разных баз данных, в том числе и база по умолчанию с mysql пользователями, в результате MySQL демон не запускался.

Первым делом я создал директорию и сделал в нее копию всех файлов баз данных:

mkdir /root/mysql_backup
cp -fpr /var/lib/mysql/* /root/mysql_backup/

Потом открыл файл конфигурации MySQL сервера в текстовом редакторе:

nano /etc/mysql/mysql.conf.d/mysqld.cnf

Добавил опцию:

innodb_force_recovery = 4

Попытался запустить MySQL сервер (у меня он запустился, если бы не запустился, то можно увеличить значение до 5 или 6 например и попробовать запустить):

/etc/init.d/mysqld start

Сделал дамп всех баз данных:

mysqldump -u root -A > /root/dumpall.sql

Остановил MySQL сервер и закомментировал «innodb_force_recovery» в конфигурации:

/etc/init.d/mysqld stop
nano /etc/mysql/mysql.conf.d/mysqld.cnf

Удалил файлы баз данных:

rm -rf /var/lib/mysql/*

Запустил MySQL сервер и сделал импорт ранее созданного дампа:

/etc/init.d/mysqld start
mysql -u root -p < /root/dumpall.sql

В итоге восстановилась база с MySQL пользователями, а также другие базы данных.

Иногда базы данных могут быть восстановлены не полностью, например может не хватать некоторых таблиц или данных, по этому необходимо обязательно сравнить с предыдущими резервными копиями.
Для важных операций, например платежей, действий пользователей, желательно писать логи в отдельную таблицу или файл, чтобы потом можно было восстановить данные после последней резервной копии.

Иногда я полностью удалял MySQL сервер, а потом устанавливал и делал импорт дампа либо резервной копии:

apt-get purge mysql-server mysql-client mysql-common
apt-get install mysql-server

Во время удаления отображался следующий текст:

The following packages will be REMOVED:
libdbd-mysql-perl* libmysqlclient-dev* libmysqlclient20* mysql-client* mysql-client-5.7* mysql-common* mysql-server* mysql-server-5.7*

Смотрите также мою статью:
Настройка репликации в MySQL

Оставьте комментарий

Добавить комментарий