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

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

29 ответов

Решение

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

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

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

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

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


Замечания:

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


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

полученное сообщение об ошибке "Невозможно создать / открыть файл блокировки: /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 для начинающих"

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

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

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

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

Судо Чоун $USER /data/db

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

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

sudo chown -R $USER /data/db

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

sudo mkdir -p /data/db/

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

sudo chown `id -u` /data/db

Тогда вы можете запустить mongod без sudo, Работает на OSX Yosemite

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

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

Похоже, ошибка возникла после обновления пакета homebrew mongodb.

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

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

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

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

Если вы используете Mac и запускаете Catalina и установленный Mongodb через Homebrew, для начала вам нужно просто ввести эту команду, и все готово.

brew services start mongodb-community

Я просто хотел указать здесь, что если вы попробуете это и столкнетесь с mkdir: /data/db: Read-only file system, посмотрите этот комментарий, который мне помог: /questions/50933901/fajlovaya-sistema-tolko-dlya-chteniya-pri-popyitke-mkdir-datadb-na-mac/50933915#50933915.

Таким образом, если кто-то использует этот ответ и использует Control F только для чтения, они увидят это

MongoDB может сбивать с толку относительно dbPath папка.

Когда ты бежишь mongod без dbpath тогда путь по умолчанию /data/db

Однако, когда вы запускаете его как службу, например systemctl start mongod затем он читает файл конфигурации, обычно /etc/mongod.cfg и в этом конфигурационном файле значения по умолчанию

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

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

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

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

$ sudo mkdir -p /data/db

Я сделал

brew install mongodb

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

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

$ brew services restart mongodb

и все возникло в жизни. мой mongoose.createConnection() звонил сделал что хотел. GUI MongoDB 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

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

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

mongod --config /etc/mongod.conf

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

storage:
  dbPath: /var/lib/mongodb

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

Создать каталог в Root

sudo mkdir -p /data/db

Теперь смените владельца

sudo chown -R $USER /data

Тебе хорошо идти!

mongod

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

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

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

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

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

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

cd
mkdir -p temp/
mongod --dbpath .

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

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

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

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

$ sudo mkdir -p /data/db

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

Mongodb при запуске ищет ~/data/db папка в качестве пути к базе данных в корневой папке вашего устройства.

Я решил это, создав ~/data папку, запустив mkdir ~/data

В корневой папке проверьте, есть ли папка с данными, набрав ls. Затем перейдите в папку данных и дважды проверьте pwd должен дать вам /Users/username/data

Затем запустите эту команду, чтобы создать путь к базе данных mongodb sudo mongod --dbpath=/Users/username/data

Это сделало это для меня, и когда я убежал mongod

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

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

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

"shutting down with code:100" 

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

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

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

./mongod --dbpath ~/mongo-data

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

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

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

service mongod start

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

service mongod status

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

Вам необходимо скачать: https://www.mongodb.com/try/download/database-tools?tck=docs_databasetools

затем вы копируете все файлы в /usr/binи все командные строки будут доступны.

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

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

    sudo mkdir -p /data/db

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

    судо монгод

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

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

ps ax | grep mongod
sudo kill ps_number

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

sudo mongod --port 27018

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

/var/lib/mongodb

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

"sudo chown -R idname / data / db"

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

У Тило есть ответ, который работал у меня до ЭТОГО:

sudo chown -R 126:135 /data/db 

Пришлось использовать:

sudo chown -R $USER /data/db

После (пере) установки пакета инструментов у меня возникла аналогичная ошибка на устройстве с Windows 10;

исключение в initAndListen: NonExistentPath: Каталог данных C:\data\db\ not found., завершение

Решение Аналогично тому, как объяснено для систем Linux: простого создания папки достаточно, чтобы запуститьmongod.exe (сервер mongoDB).

Подумал, что могу оставить это для людей, которые в конечном итоге получат те же поисковые запросы на устройстве Windows.

Убедитесь, что на вашем экземпляре Linux достаточно места на диске.

Есть действительно глупый способ создать эту проблему, который я впервые предложил:

1) оставьте свою установку mongo на некоторое время 2) вернитесь, а сервер не работает 3) попробуйте запустить его, но не используйте sudo на этот раз 4) mongo не может найти data/db/, потому что теперь он ищет домашний каталог пользователя вместо su home dir

Да, это действительно глупо, но если вы давно не пользовались системой, это может вас сбить с толку.

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

Другие вопросы по тегам