%20%E2%80%94%20%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%82%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%20.frm%2C%20%D0%BD%D0%BE%20ibdata%20%D0%BD%D0%B5%20%D0%BF%D0%BE%D0%B2%D1%80%D0%B5%D0%B6%D0%B4%D0%B5%D0%BD%D1%8B.png)
Недавний сбой сервера оставил меня с внешне нетронутым файлом ibdata, но только с половиной моих содержащих .frm каталогов. Я скопировал все это на новую установку mysql и успешно восстановил базы данных, для которых у меня все еще были файлы .frm. Мой вопрос - возможно ли как-то восстановить файлы .frm из файла ibdata? Или как-то изменить файлы .frm из версии разработки той же базы данных так, чтобы их можно было использовать для восстановления?
К сожалению, восстановление из резервной копии не является приемлемым вариантом.
Отредактировано для уточнения: я пытался восстановить базы данных с помощью локально сгенерированных файлов .frm, содержащих ту же схему, — безрезультатно, даже при innodb_force_recovery = 1.
решение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/
Мне будет любопытно узнать, сработает ли это. Похоже, многие люди уже успешно это использовали.