Однажды после того как отключилось электропитание, розрядились 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