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

475

Сегодня я впервые использую свой новый 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) пользователя mongo 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 в качестве параметра
Тило
использование UID / GID является синонимом использования символического имени. например, просто замените 'mongod: mongod числами uid / gid, которые вы нашли вышеописанным способом.
Tilo
Теперь, когда мы знаем, как правильно добавить этот каталог (data / db), почему этот каталог не был включен в установку?
winux
Если вы только что обновились до MacOS 10.15, этот ответ может помочь: stackoverflow.com/questions/58283257/…
Адам Зернер
если у вас последняя версия MAC: с новым обновлением macOS Catalina папка «/ data / db» становится доступной только для чтения, вы не можете ее изменить. Выполните эту процедуру для создания БД в другой папке: 1) Измените каталог mongod: sudo mongod --dbpath / System / Volumes / Data / data / db 2) Дайте ему псевдоним: alias mongod = "sudo mongod --dbpath / System / Объемы / Данные / данные / db "
Farbod Aprin

Ответы:

636

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

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

Тило
источник
2
попробуйте сделать ls -ld /data/ и ls -ld /data/db/.. вы увидите права доступа к каталогам, перечисленные слева, затем владельца, затем имя каталога. Вы должны убедиться, что каталоги доступны для записи по идентификатору пользователя, который запускает MongoDB.
2
@ Тило Да, я сделал их. Первый, chmod прошел нормально, второй говорит: «chown: mongod: Неверный аргумент»
Ник Так
3
Это целая тема - именно то, через что я прохожу. Но я также не могу понять, что такое user-id и group-id mongo в моей системе, и нигде не найти никакой документации по ней. Я застрял в чон монгод: часть монгод, когда он возвращаетсяinvalid arguement
Поездка
10
Обновление я пошел с sudo touch /data/db/mongod.lockи sudo chmod 0777 /data/db/mongd.lock. Она начала прямо.
Поездка
141
Запуск sudo chown -R `id -u` /data/dbили sudo chown -R $USER /data/dbвместо sudo chown mongod:mongod /data/dbменя сделал трюк
heitortsergent
117

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

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

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

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

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

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

jagough
источник
4
Если кто-то находит это полезным: у меня была та же проблема, но сообщение об ошибке было немного другим (сказано, что группа 'mongod' не существует, когда я пробовал chown mongod: mongod) -> однако использование chown $ USER сработало для я, спасибо ...
trainoasis
6
Я должен был добавить -R к этому. "sudo chown -R $ USER / data / db"
Кевин
1
Идеальный ответ для новичков,
Pyae Sone
90

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

sudo chown -R $USER /data/db
Иман Мохамади
источник
2
Также для меня. Установка mongo через homebrew на моем OSX не добавляет пользователя и группу mongod.
Заукер
73

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

sudo mkdir -p /data/db/

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

sudo chown `id -u` /data/db

Тогда вы можете бежать mongodбез sudo. Работает на OSX Yosemite

Коннор Лич
источник
1
Вместо создания нового каталога попробуйте перезапустить службу mongod. Например: - перезапуск службы Mongod
Девендра Бхат
bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
bibscy
32

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

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

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

orluke
источник
23

Установка через 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
Гал Брача
источник
@MarkusWMahlberg Спасибо за это. это одна из тех вещей, которые чувствовали себя странно, но работали. так кто же должен быть владельцем и группой этого файла?
Гал Браха
Это зависит от вашего распространения. Посмотрите на /etc/passwdимя пользователя - группа, вероятно, будет идентична. Обычно это либо mongoили mongodb.
Маркус У Малберг
@MarkusWMahlberg хорошо - я исправил это сейчас - при установке через brew он не создает пользователя и группу, поэтому я просто установил его на свое собственное имя пользователя. посмотрим, безопаснее ли это сейчас. спасибо
Гал Браха
Спасибо. При разработке на Mac с Brew это решает проблему. Нет необходимости в большей безопасности, если вы просто используете тестовые данные в mongodb. @MarkusWMahlberg на OS X, пользователь mongod называется YOUR_USER_NAME, если вы просто запустите его с помощью mongod &.
Гаспар
22

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

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

./bin/mongod --dbpath ~/data/db
loreii
источник
Это объясняет, почему он не будет использовать настройки, объявленные в /etc/mongod.conf? Были проблемы с установкой 3.6.5 на Ubuntu 16.04.
Dark Star1
попробуйте запустить в режиме verbose (-v) или явно принудительно настроить конфигурацию (--config): docs.mongodb.com/manual/reference/program/mongod. Если вы устанавливаете с помощью apt-get, запустите его с помощью службы mongod status / start / остановка
loreii
Я заглянул в журналы Монго. Все это говорило о том, что отсутствие каталога / data / db мешало запуску. В конце концов наткнулся на ваш ответ, и это, кажется, причина проблем?
Темная Звезда 1
Это также работает при использовании MongoDB в Linux-подсистеме в Windows, где на самом деле невозможно создать / data / db в корне fs.
hiergiltdiestfu
8

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

mongod --config /etc/mongod.conf

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

storage:
  dbPath: /var/lib/mongodb

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

Таль Делбари
источник
1
Я подтверждаю, что это случилось со мной. Вместо файла конфигурации мы можем просто установить --dbpath = / var / lib / mongodb. Я хоть и потерял все свои данные, но они все еще там.
lenhhoxung
8

я сделал

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

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

emrys57
источник
2020 обновление: docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x
аполлон
7

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

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

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

$ sudo mkdir -p /data/db
Рассел
источник
6

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

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

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

$ sudo mkdir -p /data/db

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

Джастин Дженкинс
источник
6

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

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

cd
mkdir -p temp/
mongod --dbpath .

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

EhevuTov
источник
6

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

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

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

ЮПО
источник
5

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

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

whiny_nil
источник
это хорошая заметка. У меня не было файла блокировки, но мне нужно было поменять владельца моих данных и папки db.
Караникас
5

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

sudo mkdir -p /data/db

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

sudo chown -R $USER /data

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

mongod

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

BloodyLogic
источник
4

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

"shutting down with code:100" 

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

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

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

./mongod --dbpath ~/mongo-data

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

Cloudish123
источник
3

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

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

service mongod start

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

service mongod status
Девендра Бхат
источник
3

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

  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
Мехеди Абдулла
источник
2

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

"sudo chown -R idname / data / db"

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

Прахар Агравал
источник
2

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

/var/lib/mongodb

illcrx
источник
1
бег mongod --dbpath /var/lib/mongodbпомогает в этих условиях
Сантьяго Аристи
1

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

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

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

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

в
источник
1

Я просто хотел указать здесь, что если вы попробуете это, и вы столкнетесь mkdir: /data/db: Read-only file system, пожалуйста, посмотрите этот комментарий, который мне помог: https://stackoverflow.com/a/58895373 .

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

blubberbo
источник
0

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

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

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

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

mtyson
источник