Назад | Перейти на главную страницу

Восстановление данных MySQL (innoDB) - отсутствуют файлы .frm, но сохранены ibdata

Недавнее фиаско с сервером оставило у меня практически неповрежденный файл ibdata, но только половину моих каталогов, содержащих .frm. Я скопировал все это в новую установку mysql и успешно восстановил базы данных, для которых у меня все еще были файлы .frm. У меня вопрос: можно ли как-нибудь восстановить файлы .frm из файла ibdata? Или как-то изменить файлы .frm из разрабатываемой версии той же базы данных, чтобы их можно было использовать для восстановления?

К сожалению, восстановление из резервной копии не является жизнеспособным вариантом.

Отредактировано для пояснения: я пытался восстановить базы данных, используя локально сгенерированные файлы .frm, содержащие ту же схему - без кубиков, даже при innodb_force_recovery = 1.

Я никогда не делал этого, но ваш вопрос касается инструментов, которые я использую, поэтому мне было любопытно! Похоже, это действительно возможно, вот пример:

http://www.chriscalender.com/?p=28

Иногда вам может потребоваться восстановить таблицу, когда все, что у вас есть, - это файл .ibd. В этом случае, если вы попытаетесь загрузить его в новый экземпляр, вы, вероятно, столкнетесь с некоторыми ошибками, связанными с несоответствием идентификатора таблицы. И на самом деле нет никакого способа обойти это.

Однако я нашел для этого два обходных пути:

Примечание. Вам потребуются файл .ibd и оператор CREATE TABLE для каждой таблицы, которую вы хотите восстановить с помощью этих методов.

  • Имитируйте внутренний счетчик таблицы InnoDB. То есть создавайте рабочие таблицы (с включенным innodb_file_per_table) до тех пор, пока внутренний указатель идентификатора таблицы не будет равен (1 - id_of_ibd_table_you_need_to_restore). (См. Метод №1)
  • Вручную отредактируйте файл .ibd в шестнадцатеричном формате, изменив идентификатор таблицы. (См. Метод №2)

Сами шаги занимают несколько страниц, поэтому я не вставлял их сюда.

Другой связанный пост: http://www.mysqlperformanceblog.com/2011/05/13/connecting-orphaned-ibd-files/

Мне было бы любопытно узнать, работает ли это, похоже, что несколько человек успешно использовали его.