Недавно при переезде я не успел забрать свои базы данных с сервера до того как он закончился. Зато успел забрать каталог 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% вариант, тем не менее, у меня такое прокатило. Попробуйте, может, у вас тоже прокатит. ) Все вопросы в комментарии или в группу ВКонтакте, помогу чем смогу.
Не забывайте делать бэкапы!