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

Я использую мой новый 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

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

/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 для начинающих"

Ответ 2

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

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

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

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

sudo chown $USER/data/db

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

Ответ 3

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

sudo chown -R $USER /data/db

Ответ 4

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

sudo mkdir -p /data/db/

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

sudo chown `id -u` /data/db

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

Ответ 5

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

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

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

Ответ 6

Установка через 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

Ответ 7

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

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

./bin/mongod --dbpath ~/data/db

Ответ 8

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

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

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

Ответ 9

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

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

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

$ sudo mkdir -p /data/db

Ответ 10

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

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

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

$ sudo mkdir -p /data/db

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

Ответ 11

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

mongod --config /etc/mongod.conf

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

storage:
  dbPath: /var/lib/mongodb

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

Ответ 12

я сделал

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

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

Ответ 13

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

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

cd
mkdir -p temp/
mongod --dbpath .

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

Ответ 14

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

Если вы попытались запустить 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 снова.

Ответ 15

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

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

service mongod start

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

service mongod status

Ответ 16

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

"sudo chown -R idname/data/db"

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

Ответ 17

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

/var/lib/mongodb

Ответ 18

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

"shutting down with code:100" 

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

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

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

./mongod --dbpath ~/mongo-data

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

Ответ 19

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

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

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

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

    судо монгод

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

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

ps ax | grep mongod
sudo kill ps_number

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

sudo mongod --port 27018