Вчера вечером я случайно удалил производственную базу данных MySql на цифровой капле океана. Я немедленно выключил apache и MySql. У меня есть следующие файлы ib *:
Могу ли я восстановить свою базу данных из этих файлов? У кого-нибудь есть программа или кто-нибудь знает такую, которая может это восстановить? Если не программа, то как отменить последние изменения на сервере?
У меня нет подстраховки.
Нет извините. Эти файлы взяты из механизма хранения innodb и представляют собой журналы, журналы и т. Д. Хотя ведение журнала действительно обеспечивает согласованность данных, оно использует для этого только метаданные, поэтому, если у вас нет данных, которые можно было бы использовать, вы ничего не восстанавливаете.
Но, возможно, это не такая большая проблема, как может показаться. Большинство файловых систем относительно легко восстановить данные из до тех пор, пока вы в него не пишете. Запись может перезаписать ваши старые удаленные данные. После удаления файл просто удаляется из «индекса файловой системы», оставляя фактические данные (которые могут быть перезаписаны новыми данными, если вы используете файловую систему).
testdisk
- отличная утилита для восстановления (удаления) файлов. Есть несколько других, которые вы можете использовать, многие из которых зависят от файловой системы. Их следует запускать на отключенном блочном устройстве. Поэтому, если вы хотите восстановить эти данные, вам следует немедленно прекратить использование этого тома и открыть его с помощью testdisk
или похожие. Вы также должны создать образ базового блочного устройства и работать с ним, а не работать со своим оригиналом. dd
- отличная утилита для этого.
Может у вас есть какие нибудь снимки тома? Это потенциально позволит вам отменить это изменение. Вы также можете использовать это, чтобы сделать моментальный снимок вашего тома в его текущем состоянии перед попыткой восстановления, избегая необходимости копировать все блочное устройство.
Прежде всего хочу отметить, что ответ «нет» логически неверен. Потому что, если вы не знаете решения, это не значит, что его не существует.
Теперь главный вопрос, что было innodb_file_per_table
, ВКЛ или ВЫКЛ. По умолчанию в последних версиях включено, поэтому, скорее всего, данные были удалены вместе с соответствующими *.ibd
файлы. Успешное восстановление во многом зависит от того, как скоро вы прекратили запись в раздел MySQL. Возьмите образ раздела как можно скорее и работайте с ним. Я не рекомендую восстанавливать файлы * .ibd, этот метод показал меньше восстанавливаемых данных. Я подозреваю, что основная причина заключается в том, что инструмент восстановления файла должен восстанавливать файл и может пожертвовать кусками с данными. Однако ваша цель - вернуть записи, поэтому я рекомендую вместо этого поискать страницы InnoDB. stream_parser
из Отмена для InnoDB (Я автор) это делает. См. Пошаговые инструкции в моем сообщении в блоге https://twindb.com/recover-after-drop-table-innodb_file_per_table-on/
Если innodb_file_per_table был ВЫКЛЮЧЕН, задание было бы проще - все данные находятся в ibdata1, меньше шансов перезаписать данные, если вы немедленно остановили MySQL. Следуйте этому сообщению для этого случая - https://twindb.com/recover-innodb-table-after-drop-table-innodb/.
В обоих случаях вам нужно будет восстановить схему. Можно взять из старых бэкапов (если есть), скриптов установки - ничего подобного. Если у вас ничего нет, последнее средство - восстановить схему из словаря InnoDB. Он находится в ibdata1 - сообщение о том, как это сделать https://twindb.com/recover-table-structure-from-innodb-dictionary/. Обратите внимание - структура должна быть 100% точной.
В целом, я должен признать, что шансы невелики, но если вы будете действовать быстро и при некоторой удаче, вы сможете восстановить некоторые, если не все данные.
Удачи.