Я использую мой новый 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
Спасибо, всем!
Вы создали каталог не в том месте
/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 для начинающих"
После получения той же самой ошибки, что и Nik
chown: id -u: Неверный аргумент
Я выяснил, что это, по-видимому, произошло из-за неправильного типа кавычек (должно быть backquotes) Форумы Ubuntu
Вместо этого я просто использовал
sudo chown $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.
Установка через 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
/etc/passwd
имя пользователя - группа, вероятно, будет идентична. Обычно это mongo
или mongodb
.
Если вы запустите mongo без аргументов, предположите, что вы работаете на производственной машине, чтобы использовать местоположения по умолчанию.
для использования вашей собственной базы данных (dev или просто другой):
./bin/mongod --dbpath ~/data/db
Я справился с этой же проблемой, создав папки /data/db с моим оконным менеджером. Я попытался сделать это, хотя терминал сначала, и для того, чтобы создать папку в корневом каталоге, мне пришлось использовать sudo.
Я только что отправился в корневой каталог с помощью Finder и создал новую папку, используя "Новая папка". Полностью работал на меня.
Примечание. Я использую OSX.
я сделал
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
и это должно запустить службу и перезапустить ее после перезагрузки.
У меня была эта проблема с существующей установкой Mongodb. Я до сих пор не уверен, почему это произошло, но по какой-то причине процесс Mongod не смог найти файл mongod.config. Поскольку он не мог найти файл конфигурации, он пытался найти файлы DB в /data/db, папке, которая не существует. Однако файл конфигурации все еще был доступен, поэтому я убедился, что у процесса есть разрешения на файл конфигурации, и запустил процесс mongod с флагом --config следующим образом:
mongod --config /etc/mongod.conf
В самом файле конфигурации у меня была эта настройка:
storage:
dbPath: /var/lib/mongodb
И так процесс может снова найти настоящую папку БД.
Ваша команда создаст структуру каталогов в текущей папке, а не корневую директорию вашего компьютера (это то, что отсутствует /
).
Первая команда была правильной, но поскольку вы пытаетесь создать папку в /
, которая является защищенным каталогом, вам нужно прикрепить ее к sudo
, что является сокращением для "superuser do". Затем вам будет предложено ввести пароль.
Таким образом, полная команда:
$ sudo mkdir -p /data/db
Вам нужно создать /data/db..., который представляет собой каталог с именем /data/ в вашем корневом каталоге (т.е. /). и подпапка там называется /db/...
Вы получаете ошибки разрешения, потому что вам нужно использовать sudo, чтобы создать директиву в корневом каталоге в MacOS, sudo позволяет запускать команды в качестве администратора.
Итак, запустите это вместо...
$ sudo mkdir -p /data/db
Это подскажет вам пароль, тот же пароль, который вы используете для изменения системных настроек (этот маленький диалог, который открывается при попытке изменить вещи в Системных настройках для ecample), и, вероятно, так же, как вы используете для входа в систему.
Простое примечание:
Если вы попытались запустить 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 снова.
Вы пытаетесь создать каталог, к которому у вас нет доступа root.
Для тестирования mongodb я просто использую каталог из каталога пользователя, например:
cd
mkdir -p temp/
mongod --dbpath .
Это сделает базу данных mongo в temp/из вашего текущего рабочего каталога
До этой даты я также думал, что нам нужно создать эту папку /data/db для запуска команды mongod.
Но недавно я попытался запустить mongod с сервисной командой, и она работала для меня, и не было необходимости создавать каталог /data/db.
service mongod start
Для проверки состояния mongod вы можете запустить следующую команду.
service mongod status
Это решение решает мою проблему
Сделать каталог как
Судо Макдир -p/data/db
Это сделает каталог с именем db, а затем попытаться начать с помощью команд
судо монгод
Если вы получаете другую ошибку или проблему с запуском mongod, вы можете найти проблему как
Не удалось настроить прослушиватель: SocketException: Адрес уже используется Если вы обнаружите, что другая ошибка, чем вы должны убить запущенный процесс mongod, набрав в терминале как
ps ax | grep mongod
sudo kill ps_number
и найдите работающий порт mongod и убейте процесс. Другой способ - создать специальный порт при запуске mongod как
sudo mongod --port 27018
Я продолжал получать следующую ошибку, когда пытался запустить mongodb.
"shutting down with code:100"
Я использовал следующую команду:
./mongod --dbpath=~/mongo-data
Исправление для меня состояло в том, что мне не нужен знак "=", и это вызывало ошибку. Так я и сделал
./mongod --dbpath ~/mongo-data
Просто хотел выбросить это там, потому что ошибка никоим образом не указывает, что это проблема. Я почти удалил содержимое каталога ~/mongo-data, чтобы посмотреть, помогло ли это. Рад, что вспомнил, что в некоторых случаях знак "=" не используется.
В более современных версиях MongoDB у меня есть 3.2.10, он сохраняется по умолчанию в
/var/lib/mongodb
mongod --dbpath /var/lib/mongodb
помогает в этих условиях
Введите "id" на терминале, чтобы просмотреть доступные идентификаторы пользователей, которые вы можете дать, Затем просто введите
"sudo chown -R idname/data/db"
Это сработало для меня! Надеюсь, это решит вашу проблему.
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 в качестве параметра