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

Можно ли восстановить базы данных 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, но, как я и ожидал, он не обрабатывает эти файлы).

Спасибо

В .ns .0 .1 и т.д. файлы сами по себе являются файлами данных. Если вы начали 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 пример.