Восстановление базы данных MySQL из .ibd и .frm файлов при помощи сотового телефона
Invite pending
Однажды передо мной возникла такая задача. Есть чужой веб-сервер с рухнувшей MySQL, и ftp-доступ к нему. Нужно перенести файлы на новый сервер и восстановить сайт. Дампа БД нет. Всё, что осталось от БД — файлы .ibd и .frm. А значит, это скорее всего MySQL InnoDB, и просто скопировать файлы, как в случае с MyISAM — не получится. Но восстановить всё же возможно.
Очень помогла вот эта статья: для восстановления таблицы нужно на новом сервере создать по .frm файлу таблицу с прежней структурой, а потом заменить .ibd файл, приведя в соответствие id таблицы в нём и id новой таблицы на сервере. Я попытался воспользоваться вторым из описанных там способов — править в hex-редакторе id таблиц в .ibd. Конечный результат был успешным, лишь пришлось повозиться с теми таблицами, где хранится много записей — в них id содержится не только в начале файла, но и повторяется в каждой странице, и для них больше подошёл бы первый способ (если, конечно, таких таблиц не слишком много).
Но перед тем, как всё получилось, меня ждал ещё один сюрприз. Я создал новую базу данных в Денвере на своём ноутбуке, попробовал, но ничего не заработало. Не понимает MySQL эти файлы, и всё тут. После изучения логов погибшего сервера, для уточнения версии MySQL, причина была найдена: там стоял Percona server.
Отправившись на поиски Percona для Windows, я наткнулся на описание его установки… на Андроид. «Почему бы и не поразвлечься?» — посмотрел я на свой простенький Fly IQ440. Установил Linux Deploy и Ubuntu. Процесс установки оказался не сложнее, чем подключение готового образа к VirtualBox (если на телефоне уже есть права root), но в отличие от VirtualBox на компьютере — здесь не пришлось заниматься колдовством с портами: сразу же заработал интернет, хоть через сотовую сеть, хоть через wifi. Подключившись к телефону через SSH с компьютера, последовал инструкции по вышеприведённой ссылке. Скачалось и без каких-либо проблем установилось необходимое ПО. Я ожидал, что на телефоне всё будет работать очень медленно, но был приятно удивлён: различий с «большим компьютером» на глаз можно и не заметить, а тесты скорости есть по приведённой ссылке. При этом, на самом телефоне, приложение работает в фоне и не вызывает никаких проблем с обычной работой аппарата.
После исправления ошибки для ARM-процессора в исходнике, Percona Server был благополучно скомпилирован и заработал. После решения проблем с восстановлением базы данных, решил систему оставить «на память». Теперь в домашней wifi-сети присутствует ещё один сервер, собранный в таком неожиданном месте.
Очень помогла вот эта статья: для восстановления таблицы нужно на новом сервере создать по .frm файлу таблицу с прежней структурой, а потом заменить .ibd файл, приведя в соответствие id таблицы в нём и id новой таблицы на сервере. Я попытался воспользоваться вторым из описанных там способов — править в hex-редакторе id таблиц в .ibd. Конечный результат был успешным, лишь пришлось повозиться с теми таблицами, где хранится много записей — в них id содержится не только в начале файла, но и повторяется в каждой странице, и для них больше подошёл бы первый способ (если, конечно, таких таблиц не слишком много).
Но перед тем, как всё получилось, меня ждал ещё один сюрприз. Я создал новую базу данных в Денвере на своём ноутбуке, попробовал, но ничего не заработало. Не понимает MySQL эти файлы, и всё тут. После изучения логов погибшего сервера, для уточнения версии MySQL, причина была найдена: там стоял Percona server.
Отправившись на поиски Percona для Windows, я наткнулся на описание его установки… на Андроид. «Почему бы и не поразвлечься?» — посмотрел я на свой простенький Fly IQ440. Установил Linux Deploy и Ubuntu. Процесс установки оказался не сложнее, чем подключение готового образа к VirtualBox (если на телефоне уже есть права root), но в отличие от VirtualBox на компьютере — здесь не пришлось заниматься колдовством с портами: сразу же заработал интернет, хоть через сотовую сеть, хоть через wifi. Подключившись к телефону через SSH с компьютера, последовал инструкции по вышеприведённой ссылке. Скачалось и без каких-либо проблем установилось необходимое ПО. Я ожидал, что на телефоне всё будет работать очень медленно, но был приятно удивлён: различий с «большим компьютером» на глаз можно и не заметить, а тесты скорости есть по приведённой ссылке. При этом, на самом телефоне, приложение работает в фоне и не вызывает никаких проблем с обычной работой аппарата.
После исправления ошибки для ARM-процессора в исходнике, Percona Server был благополучно скомпилирован и заработал. После решения проблем с восстановлением базы данных, решил систему оставить «на память». Теперь в домашней wifi-сети присутствует ещё один сервер, собранный в таком неожиданном месте.