У меня установлен 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
пример.