Возможно ли восстановить базы данных MongoDB из файлов .ns и .0, .1, . ...?

Возможно ли восстановить базы данных MongoDB из файлов .ns и .0, .1, . ...?

У меня установлена ​​MongoDB 2.0.4 на Ubuntu 12.10. Недавно у меня возникли проблемы с подключением к базе данных извне, и я понял, что что-то мешает MongoDB правильно запуститься. Как и предлагалось в нескольких источниках (см. StackOverflow), я удалил /var/lib/mongodb/mongodb.lockи запустил mongod --repair. Это не решило проблему, MongoDB не запускалась и продолжала создавать файлы блокировки, которые она впоследствии не удаляла. Просматривая логи, я понял, что у нее нет доступа к какой-то папке под названием $tmpSomething, поэтому (так как название предполагало временную папку) я удалил ее, и после этого все заработало... за исключением того факта, что у меня в поле зрения только одна из моих предыдущих баз данных, в то время как другие все еще там, потому что моя /var/lib/mongodb/папка все еще заполнена .ns .0 .1 .nфайлами, которые весят много. Есть ли способ восстановить их в базе данных? (Я пробовал с помощью mongorestore, но, как я и ожидал, он не обрабатывает эти файлы).

Спасибо

решение1

Файлы .ns .0 .1etc. — это сами файлы данных. Если вы запустили mongodэкземпляр с --dbpathаргументом, указывающим на эту папку, или если вы переместили содержимое куда-то еще и использовали опцию, чтобы указать туда, mongod попытается прочитать их как обычно.

Поскольку ваши проблемы предполагают повреждение и/или какую-то другую проблему с запуском mongod(вам действительно следует опубликовать файлы журнала сообщений о запуске, возможно, в отдельном вопросе, чтобы решить эту проблему), то есть альтернативы. Для справки, наиболее распространенные проблемы связаны с разрешениями, особенно когда люди пытаются запустить mongod вручную (как они сами) или с помощью sudo (как root) и создают проблемные разрешения в различных каталогах.

Вы правы, что mongorestoreнельзя использовать эти файлы данных напрямую, но mongodumpможно читать их и выгружать данные из них в файлы BSON, которые mongorestoreожидаются.

Вариант, который вам нужен здесь, этоdbpath. Вы упоминаете, что ваш путь — /var/lib/mongo, поэтому вы можете запустить что-то вроде этого:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files

При желании вы можете использовать --repairздесь также для исправления повреждения вместе с параметрами запроса в экстремальных обстоятельствах, чтобы обойти поврежденные разделы (редко, если вообще требуется). Различные параметры описаны на странице mongodump:

http://docs.mongodb.org/manual/reference/mongodump/

После того, как вы выгрузите файлы, вы можете использовать mongorestoreих для повторного импорта в другой mongodэкземпляр.

Связанный контент