Восстановление базы данных MySQL innoDB из файлов ibd и frm

Недавно при переезде я не успел забрать свои базы данных с сервера до того как он закончился. Зато успел забрать каталог var, в котором, как известно, хранятся и MySQL базы данных в каталоге /var/lib/mysql.

Собственно, в этой статье я расскажу про свой опыт восстановления баз данных из этих файлов. Кому нужен сразу результат — листайте в конец.

Опыта в переносе баз данных из файлов у меня не было. Как известно, файлы MyISAM можно спокойно перенести из папки в папку и всё будет работать.
Решил попробовать с .frm и .ibd файлами сделать такой же трюк. Перенёс, пробую открыть иии… Получаю ошибку в виде:

table doesn't exist in engine

Конечно же, не забыл выставить права:

chown -r mysql:mysql /var/lib/mysql

Но, как не сложно догадаться, это было безуспешно.
Следом я попробовал провернуть это:

ALTER TABLE tablename DISCARD TABLESPACE;
ALTER TABLE tablename IMPORT TABLESPACE;

Что, конечно же, снова мне не помогло и я упёрся в эту ошибку.

Немного прочитав о том, как это всё устроено пришёл к выводу, что для запуска этих таблиц нужно жертвоприношение перенести так же файл ibdata1, из папки /var/lib/mysql.
Недолго думая, я забэкапил и удалил свой каталог /var/lib/mysql на локальном компьютере и закинул тот, с хоста.
Так же, конечно же, не забыл сменить права на папку

chown -r mysql:mysql /var/lib/mysql

Попробовал подключиться, и, о чудо, все таблицы на месте, открываются и в целом с ними всё нормально!

P.S. Это не 100% вариант, тем не менее, у меня такое прокатило. Попробуйте, может, у вас тоже прокатит. ) Все вопросы в комментарии или в группу ВКонтакте, помогу чем смогу.

Не забывайте делать бэкапы!