
У меня установлена 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 .1
etc. — это сами файлы данных. Если вы запустили 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
экземпляр.