Экспорт из файла базы данных mongo в bson

У меня есть база данных монго db.ns, db.0, db.1,... db.7

Случайно удаляю все данные из коллекции, но в файлах базы данных (проводник с вимом) все (или часть) данные.

После попытки восстановить данные, перемещенные в другой экземпляр mongodb, или mongod --restore, я также пытаюсь использовать mongodump, но коллекция оказывается пустой.

Пытаюсь восстановить с нуля, прямо из файлов. Я пытаюсь использовать bsondump для каждого и для одного файла (cat db.ns db.1 ... > bigDB), но ничего.

Я не знаю, какие еще есть способы восстановить данные из файла базы данных монго.

Любое предложение?? Спасибо!!!


person gelito    schedule 13.01.2014    source источник
comment
Насколько я понимаю, после удаления документа в mongodb соответствующий BSON удаляется из файла данных mongodb. Файл данных не сжимается, данные просто стираются. Я не думаю, что восстановление возможно, однако вы можете попробовать IRC, если вам нужен более быстрый ответ. mongodb.org/about/support   -  person Pete Garafano    schedule 13.01.2014
comment
возможный дубликат удаленные записи восстановления mongodb   -  person Pete Garafano    schedule 13.01.2014


Ответы (1)


[РЕШЕНО]

Я попытаюсь объяснить, что я делаю, чтобы «решить» проблему.

Во-первых. Теория.

В этом SlideShare можно немного увидеть, как работают файлы базы данных MongoDB. http://www.slideshare.net/mdirolf/inside-mongodb-the-internals-of-an-opensource-database

Параметры:

При случайном удалении коллекции:

  • первое, что вам нужно сделать, это быстро скопировать всю базу данных (обычно в /data/db или /var/lib/mongodb) и остановить службу. Удалите каталог журналов, попробуйте восстановить эту копию и молитесь ;D

Подробнее об этом можно узнать здесь: восстановление удаленных записей mongodb

В моем случае это не сработало.

  • В случае Journaly mongo не обновляет файлы своей базы данных напрямую, а только свои индексы. Итак, вы можете получить доступ к файлам (назначенным как database.ns, database.0, database.1 ...) и попытаться восстановить это.

Эти файлы бывают как расщепленными BSON, так и бинарными. Итак, вы можете открыть и посмотреть всю информацию

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

Перед этим возьмем один к одному и применим некоторые регулярные выражения для удаления шестнадцатеричных значений, взорвем информацию в регистры (вы можете увидеть ключ «_id», чтобы сделать это) и выполните некоторые другие задачи для очистки информации.

И, наконец, мне нужно вручную обработать всю предварительно обработанную информацию, чтобы получить всю информацию.

Думаю, я потерял, как минимум, 15-25% информации. Но я предпочитаю думать, что восстановил 75% потерянной информации.

Внимание!

  • Это не простой и безопасный способ решить эту проблему. В моем случае БД только получает информацию, а не изменяет и не обновляет ее.
  • С помощью этого метода будет потеряно много информации, идентификаторы Mongo, целые числа, даты не могут быть восстановлены.
  • Процесс выполняется на 100% вручную, вы можете потратить свое время на автоматизацию определенных задач, но это будет зависеть от структуры вашей базы данных.
person gelito    schedule 21.01.2014