Восстановление InnoDB после переноса сервера


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

Вроде бы проблем быть не должно, но часто при таком переносе ломается InnoDB. Ниже приведу пример, как можно это исправить.

Заходим на сервер через консоль и необходимо сделать выгрузку всех баз. Если MySQL постоянно падает или не поднимается, то в некоторых случаях помогает следуюющее: вписать в конфиг файл /etc/my.cnf строчку в разделе [mysql]

innodb_force_recovery = 4

После этого надо запустить mysql

service mysqld start

Далее делаем бэкап наших баз

mysqldump -uroot -pMyPassword -A > /home/dumpall.sql
где root это логин в MySQL и MyPass пароль. Заменить надо на свои.

После как будет готово останавливаем MySQL

service mysqld stop

На всякий случай можно скопировать содержимое папки /var/lib/mysql

cp -r /var/lib/mysql/* /home/mysql_backup/

Удаляем содержимое папки mysql

rm -rf /var/lib/mysql/*

И стартуем mysql

service mysqld start

После этого будет заново создана структура системной базы
На всякий случай перезапустим mysql

service mysqld stop
service mysqld start

Если всё нормально, то можем приступать к залитию дампа обратно

mysql -uroot -pMyPassword < /home/dumball.sql

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

Остановим mysql и запустим его с другими параметрами

service mysql stop
mysqld_safe --skip-grant-tables &mysqld_safe --skip-grant-tables &

Далее подключаемся к mysql и сбрасываем пароль на MyPassword (впишите свой)

mysql
use mysql;
update user set authentication_string=PASSWORD("MyPassword") where User='root';
flush privileges;
quit;
service mysql stop
service mysql start
mysql -uroot -pMyPassword
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyPassword';
flush privileges;
quit;

После этого шага необходимо залить базу обратно командой mysql -uroot -pMyPassword < /home/dumball.sql