Mongod жалуется, что нет папки / data / db

364

Я использую мой новый Mac впервые сегодня. Я следую руководству по началу работы на mongodb.org до тех пор, пока не будет создан каталог /data/db. Кстати, я использовал маршрут доморощенного.

Итак, я открываю терминал, и я думаю, что я нахожусь в том, что вы назвали Домашним Каталогом, потому что, когда я делаю "ls" , я вижу папки "Рабочие приложения", "Фильмы с картинками" и "Библиотека".

Итак, я сделал

mkdir -p /data/db

во-первых, он говорит, что разрешение отклонено. Я продолжал пробовать разные вещи на полчаса и, наконец:

mkdir -p data/db

работал. и когда я "ls" , каталог данных и вложенных в него папка db существуют.

Затем я запускаю mongod, и он жалуется, что не нашел данные /db

Я сделал что-то не так?

Теперь я сделал

sudo mkdir -p /data/db

и когда я делаю "ls" , я вижу данные dir и db dir. внутри db dir, хотя в нем нет абсолютно ничего, и когда я теперь запускаю mongod

Sun Oct 30 19:35:19 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Sun Oct 30 19:35:19 dbexit: 
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to flush diaglog...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 30 19:35:19 [initandlisten] shutdown: lock for final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: closing all files...
Sun Oct 30 19:35:19 [initandlisten] closeAllFiles() finished
Sun Oct 30 19:35:19 [initandlisten] shutdown: removing fs lock...
Sun Oct 30 19:35:19 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Sun Oct 30 19:35:19 dbexit: really exiting now

ИЗМЕНИТЬ Получение сообщения об ошибке для

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

Спасибо, всем!

  • 1
    «Неверный аргумент» означает, что символическое имя для пользователя mongo отличается в вашей системе - вы, вероятно, используете другой пакет или механизм установки для установки MongoDB. Вам следует проверить файлы / etc / passwd и / etc / group на символическое имя (или uid / gid) пользователя grep mongo /etc/passwd /etc/group . Если это не сработает, проверьте имя, проверив владельца каталога ls -ld /var/lib/mongo . Или посмотреть, как uid / gid делает это: ls -lnd /var/lib/mongo . В моем случае drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ... - это означает использование 487: 480 в качестве параметра
  • 0
    использование UID / GID является синонимом использования символического имени. например, просто замените 'mongod: mongod числами uid / gid, которые вы нашли вышеописанным способом.
Показать ещё 1 комментарий
Теги:
macos
osx

19 ответов

502
Лучший ответ

Вы создали каталог не в том месте

/data/db означает, что он находится непосредственно в корневом каталоге '/', тогда как вы создали 'data/db' (без начального /), вероятно, просто в другом каталоге, таком как домашний каталог /root.

Вам нужно создать этот каталог как root

Либо вам нужно использовать sudo, например sudo mkdir -p/data/db

Или вам нужно сделать su - чтобы стать суперпользователем, а затем создать каталог с помощью mkdir -p/data/db


Замечания:

MongoDB также имеет опцию, где вы можете создать каталог данных в другом месте, но это, как правило, не очень хорошая идея, потому что это немного усложняет такие вещи, как восстановление БД, потому что вы всегда должны указывать db -p ath вручную. Я бы не рекомендовал это делать.


Редактировать:

полученное сообщение об ошибке "Невозможно создать/открыть файл блокировки: /data/db/mongod.lock errno: 13 Отказано в доступе". Кажется, что созданный вами каталог не имеет правильных прав доступа и владельца - он должен быть доступен для записи пользователю, который запускает процесс MongoDB.

Чтобы увидеть разрешения и владельца каталога /data/db/, сделайте следующее: (именно так должны выглядеть права доступа и владельца)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/

В левой части "drwxr-xr-x" показаны разрешения для пользователя, группы и других. "mongod mongod" показывает, кому принадлежит каталог и к какой группе принадлежит этот каталог. В этом случае оба называются "монгод".

Если ваш каталог /data/db не имеет указанных выше прав доступа и прав доступа, сделайте следующее:

Сначала проверьте, какой пользователь и группа у вашего пользователя mongo:

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false

У вас должна быть запись для mongod в /etc/passwd, так как это демон.

sudo chmod 0755 /data/db
sudo chown -R 498:496 /data/db    # using the user-id , group-id

Вы также можете использовать имя пользователя и имя группы следующим образом: (их можно найти в /etc/passwd и /etc/group)

sudo chown -R mongod:mongod /data/db 

это должно заставить его работать..

В комментариях ниже некоторые люди использовали это:

sudo chown -R 'id -u' /data/db
sudo chmod -R go+w /data/db

или же

sudo chown -R $USER /data/db 
sudo chmod -R go+w /data/db

Недостатком является то, что $ USER - это учетная запись, которая имеет оболочку входа. В идеале у демонов не должно быть оболочки, поэтому вы видите /bin/false в grep файла паролей выше.

Отметьте здесь, чтобы лучше понять значение разрешений для каталога:

http://www.perlfect.com/articles/chmod.shtml

Возможно также посмотрите одно из руководств, которые вы можете найти через Google: "UNIX для начинающих"

  • 0
    Привет Тило, спасибо за то, что написали ... И спасибо за то, что я вижу краткое введение nano (и от других ответчиков) к тому, как dir работает в Mac, я действительно ценю это (!) - так из того, что я могу понять, "root "каталог очень похож на C: \ в среде Windows, это правильно? В любом случае, я сделал то, что вы предложили (похоже, то же самое, что и от других ответчиков), и в новом окне терминала, когда я делаю «ls», я вижу каталог данных и в нем я вижу каталог db. однако, когда я делаю mongod, я получаю сообщение, которое я добавил к основному вопросу
  • 0
    да, правильно, корневой каталог '/' является каталогом верхнего уровня.
Показать ещё 21 комментарий
96

После получения той же самой ошибки, что и Nik

chown: id -u: Неверный аргумент

Я выяснил, что это, по-видимому, произошло из-за неправильного типа кавычек (должно быть backquotes) Форумы Ubuntu

Вместо этого я просто использовал

sudo chown $USER/data/db

в качестве альтернативы, и теперь mongod имеет необходимые ему разрешения.

  • 4
    Если кто-то находит это полезным: у меня была та же проблема, но сообщение об ошибке было немного другим (сказано, что группа 'mongod' не существует, когда я пробовал chown mongod: mongod) -> однако, использование chown $ USER сработало для мне спасибо ...
  • 6
    Я должен был добавить -R к этому. "sudo chown -R $ USER / data / db"
Показать ещё 2 комментария
76

Это работает для меня, в комментариях:

sudo chown -R $USER /data/db
  • 0
    Также работал для меня, спасибо!
  • 1
    Также для меня. Установка mongo через homebrew на моем OSX не добавляет пользователя и группу mongod.
Показать ещё 1 комментарий
60

Создайте папку.

sudo mkdir -p /data/db/

Дайте себе разрешение на папку.

sudo chown `id -u` /data/db

Затем вы можете запустить mongod без sudo. Работает на OSX Yosemite

  • 1
    Вместо создания нового каталога попробуйте перезапустить службу mongod. Например: - перезапуск службы mongod
25

Чтобы исправить эту ошибку в OS X, я перезапустил и остановил службу: $ brew services restart mongodb $ brew services stop mongodb

Затем я запустил mongod --config /usr/local/etc/mongod.conf, и проблема исчезла.

Ошибка возникла после обновления пакета homebrew mongodb.

21

Установка через brew на Mac, где YOUR_USER_NAME и персонал - это группа

sudo mkdir -p /data/db
sudo chmod +x+r+w /data/db/
sudo touch /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db
sudo chmod +x+r+w /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db/mongod.lock
  • 0
    @MarkusWMahlberg Спасибо за это. это одна из тех вещей, которые чувствовали себя странно, но работали. так кто же должен быть владельцем и группой этого файла?
  • 0
    Это зависит от вашего распространения. Посмотрите в /etc/passwd имя пользователя - группа, вероятно, будет идентична. Обычно это mongo или mongodb .
Показать ещё 2 комментария
11

Если вы запустите mongo без аргументов, предположите, что вы работаете на производственной машине, чтобы использовать местоположения по умолчанию.

для использования вашей собственной базы данных (dev или просто другой):

./bin/mongod --dbpath ~/data/db
  • 0
    Это объясняет, почему он не будет использовать настройки, объявленные в /etc/mongod.conf? Были проблемы с установкой 3.6.5 на Ubuntu 16.04.
  • 0
    попробуйте запустить в режиме подробного ввода (-v) или явно принудительно настроить конфигурацию (--config): docs.mongodb.com/manual/reference/program/mongod. Если вы устанавливаете с помощью apt-get, запустите его с помощью службы mongod status / start /стоп
Показать ещё 1 комментарий
4

Я справился с этой же проблемой, создав папки /data/db с моим оконным менеджером. Я попытался сделать это, хотя терминал сначала, и для того, чтобы создать папку в корневом каталоге, мне пришлось использовать sudo.

Я только что отправился в корневой каталог с помощью Finder и создал новую папку, используя "Новая папка". Полностью работал на меня.

Примечание. Я использую OSX.

  • 0
    лучший ответ, спасибо друг
3

я сделал

brew install mongodb

на 2018-02-01, и это дало мне версию mongodb 3.6.2.

По подсказке от orluke выше я попробовал просто

$ brew services restart mongodb

и все возникло в жизни. Мой вызов mongoose.createConnection() сделал то, что я хотел. GUI MongoDB Compass, версия сообщества, будет подключен. Я использовал Compass, чтобы посмотреть на коллекцию local.startup_log. В нем был один документ, в котором я только что запустил службу mongoDB, и это было

cmdLine:Object
    config:"/usr/local/etc/mongod.conf"

и действительно был такой файл:

$ more /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

и там был каталог /usr/local/var/mongodb со множеством непонятных файлов. Так что, похоже, сейчас работает установка.

Я не уверен, что при brew services restart служба запускается при входе в систему. Так я и сделал

brew services stop mongodb
brew services start mongodb

и надеялся, что запустит его снова после перезагрузки. И это действительно так. На самом деле, теперь, я думаю, что правильная вещь после начальной установки

brew services start mongodb

и это должно запустить службу и перезапустить ее после перезагрузки.

3

У меня была эта проблема с существующей установкой Mongodb. Я до сих пор не уверен, почему это произошло, но по какой-то причине процесс Mongod не смог найти файл mongod.config. Поскольку он не мог найти файл конфигурации, он пытался найти файлы DB в /data/db, папке, которая не существует. Однако файл конфигурации все еще был доступен, поэтому я убедился, что у процесса есть разрешения на файл конфигурации, и запустил процесс mongod с флагом --config следующим образом:

mongod --config /etc/mongod.conf

В самом файле конфигурации у меня была эта настройка:

storage:
  dbPath: /var/lib/mongodb

И так процесс может снова найти настоящую папку БД.

3

Ваша команда создаст структуру каталогов в текущей папке, а не корневую директорию вашего компьютера (это то, что отсутствует /).

Первая команда была правильной, но поскольку вы пытаетесь создать папку в /, которая является защищенным каталогом, вам нужно прикрепить ее к sudo, что является сокращением для "superuser do". Затем вам будет предложено ввести пароль.

Таким образом, полная команда:

$ sudo mkdir -p /data/db
3

Вам нужно создать /data/db..., который представляет собой каталог с именем /data/ в вашем корневом каталоге (т.е. /). и подпапка там называется /db/...

Вы получаете ошибки разрешения, потому что вам нужно использовать sudo, чтобы создать директиву в корневом каталоге в MacOS, sudo позволяет запускать команды в качестве администратора.

Итак, запустите это вместо...

$ sudo mkdir -p /data/db

Это подскажет вам пароль, тот же пароль, который вы используете для изменения системных настроек (этот маленький диалог, который открывается при попытке изменить вещи в Системных настройках для ecample), и, вероятно, так же, как вы используете для входа в систему.

2

Простое примечание:

Если вы попытались запустить mongod, не изменяя сначала разрешения, у вас, скорее всего, будет файл mongod.lock(и некоторые другие файлы) в каталоге /data/db. Даже после того, как вы измените разрешения для каталога /data/db, чтобы предоставить доступ к вашему USER, вы продолжите получать "Невозможно создать/открыть файл блокировки:/data/db/mongod.lock errno: 13 Permission denied" ошибка. Запустите ls -al/data/db, и вы, вероятно, увидите, что разрешения для отдельных файлов по-прежнему настроены как root для пользователя, а не для вашего USER. Вам следует удалить файл mongod.lock и другие. Затем, когда вы снова запустите mongod, все должно работать, и вы можете проверить, соответствуют ли разрешения файлов разрешениям каталога, запустив ls -al снова.

  • 0
    это хорошая заметка. У меня не было файла блокировки, но мне нужно было поменять владельца моих данных и папки db.
2

Вы пытаетесь создать каталог, к которому у вас нет доступа root.

Для тестирования mongodb я просто использую каталог из каталога пользователя, например:

cd
mkdir -p temp/
mongod --dbpath .

Это сделает базу данных mongo в temp/из вашего текущего рабочего каталога

1

До этой даты я также думал, что нам нужно создать эту папку /data/db для запуска команды mongod.

Но недавно я попытался запустить mongod с сервисной командой, и она работала для меня, и не было необходимости создавать каталог /data/db.

service mongod start

Для проверки состояния mongod вы можете запустить следующую команду.

service mongod status
0

Это решение решает мою проблему

  1. Сделать каталог как

    Судо Макдир -p/data/db

  2. Это сделает каталог с именем db, а затем попытаться начать с помощью команд

    судо монгод

Если вы получаете другую ошибку или проблему с запуском mongod, вы можете найти проблему как

Не удалось настроить прослушиватель: SocketException: Адрес уже используется Если вы обнаружите, что другая ошибка, чем вы должны убить запущенный процесс mongod, набрав в терминале как

ps ax | grep mongod
sudo kill ps_number

и найдите работающий порт mongod и убейте процесс. Другой способ - создать специальный порт при запуске mongod как

sudo mongod --port 27018
0

Я продолжал получать следующую ошибку, когда пытался запустить mongodb.

"shutting down with code:100" 

Я использовал следующую команду:

./mongod --dbpath=~/mongo-data

Исправление для меня состояло в том, что мне не нужен знак "=", и это вызывало ошибку. Так я и сделал

./mongod --dbpath ~/mongo-data

Просто хотел выбросить это там, потому что ошибка никоим образом не указывает, что это проблема. Я почти удалил содержимое каталога ~/mongo-data, чтобы посмотреть, помогло ли это. Рад, что вспомнил, что в некоторых случаях знак "=" не используется.

0

В более современных версиях MongoDB у меня есть 3.2.10, он сохраняется по умолчанию в

/var/lib/mongodb

  • 0
    Запуск mongod --dbpath /var/lib/mongodb помогает в этих условиях
0

Введите "id" на терминале, чтобы просмотреть доступные идентификаторы пользователей, которые вы можете дать, Затем просто введите

"sudo chown -R idname/data/db"

Это сработало для меня! Надеюсь, это решит вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню