Mongod скаржиться, що немає папки / data / db


474

Я вперше використовую свій новий mac. Я дотримуюся посібника для початку роботи на mongodb.org аж до кроку, де створюється каталог / data / db. btw, я використовував домашній шлях.

Тож я відкриваю термінал, і я думаю, що переживаю те, що ви назвали Домашній каталог, бо коли я роблю "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

EDIT Отримання повідомлення про помилку для

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 / ...
Адам Zerner

якщо у вас є остання версія MAC: З новим оновленням macOS Catalina папка "/ data / db" стає лише для читання, ви не можете її змінити. Виконайте цю процедуру, щоб створити БД в іншій папці: 1) Змінити каталог mongod: sudo mongod --dbpath / Система / Томи / Дані / дані / db 2) Дайте йому псевдонім: alias mongod = "sudo mongod --dbpath / System / Томи / Дані / дані / дб "
Farbod Aprin

Відповіді:


636

Ви створили каталог у неправильному місці

/ data / db означає, що він знаходиться безпосередньо в кореневій директорії '/', тоді як ви створили 'data / db' (без провідного /), ймовірно, просто в іншій каталозі, наприклад, в домашньому довіднику '/ 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 у греппі файла пароля вище.

Перевірте тут, щоб краще зрозуміти значення дозволів каталогу:

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

Можливо, також ознайомтеся з одним із навчальних посібників, які ви можете знайти через Google: "UNIX для початківців"


2
спробуйте зробити, ls -ld /data/ і ls -ld /data/db/.. ви побачите дозволи для каталогу, перелічені зліва, потім право власності, потім ім'я каталогу. Ви повинні переконатися, що каталоги записуються за допомогою ідентифікатора користувача, який працює з MongoDB.

2
@Tilo Так, я їх зробив. Перший - chmod пішов нормально, другий - "chown: mongod: Недійсний аргумент"
Nik So

3
Це ціла нитка - саме те, що я переживаю. Але я також не можу зрозуміти, що ідентифікатор користувача та ідентифікатор групи 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

Натомість я просто використовував

sudo chown $ USER / дані / дб

як альтернатива, і зараз mongod має необхідні дозволи.


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. Напр .: - перезапуск сервісного монгоду
Девендра

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, і проблеми вже не було.

Здається, помилка виникла після оновлення пакету mongodb homebrew.


23

Встановлення через пивоварню на 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.
Markus W Mahlberg

@MarkusWMahlberg нормально - я це виправив зараз - при встановленні через пивоваріння він не створює користувача та групу, тому я просто встановив його власним іменем користувача. подивіться, чи зараз це безпечніше. спасибі
Гал Брача

Дякую. Під час розробки на mac з варінням це вирішує проблему. Немає необхідності в більшій безпеці, якщо ви просто використовуєте тестові дані в mongodb. @MarkusWMahlberg в ОС X, користувач, який працює з mongod, є YOUR_USER_NAME, якщо ви просто запустите його з "mongod &".
gaspard

22

Якщо ви запускаєте mongo без аргументів, то припускайте, що ви працюєте на виробничій машині, тому використовуйте локації за замовчуванням.

для використання вашої власної бази даних (Dev або просто іншої):

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

Чи пояснює це, чому він не використовуватиме налаштування, оголошені в /etc/mongod.conf? Виникли проблеми з установкою 3.6.5 на ubuntu 16.04.
Темна зірка1

спробуйте запустити в режимі verbose (-v) або явно примушуйте config (--config): docs.mongodb.com/manual/reference/program/mongod Якщо ви встановлюєте за допомогою apt-get, запускайте його зі статусом / запуском служби mongod / зупинка
loreii

Я заглянув у журнали монго. Все це говорило так, що відсутність каталогу / data / db перешкоджає запуску. Зрештою натрапив на вашу відповідь, і це, здається, є причиною проблем?
Темна зірка1

Це також працює при використанні MongoDB в Linux-підсистемі в Windows, де реально створити / data / db в корені fs неможливо.
hiergiltdiestfu

8

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

mongod --config /etc/mongod.conf

У самому конфігураційному файлі у мене було таке налаштування:

storage:
  dbPath: /var/lib/mongodb

Ось так процес міг знову знайти справжню папку БД.


1
Я підтверджую, що це сталося зі мною. Замість конфігураційного файлу ми можемо просто встановити --dbpath = / var / lib / mongodb. Я хоч і втратив усі свої дані, але вони все ще є.
lenhhoxung

8

я зробив

brew install mongodb

01.02.2018, і це дало мені 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

і це має запустити службу та перезапустити її після перезавантаження.



7

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

Перша команда була правильною, але, оскільки ви намагаєтесь створити папку в /захищеному каталозі, вам потрібно встановити префікс sudo, який є коротким для "superperuser do". Потім вам буде запропоновано пароль.

Таким чином, повна команда буде:

$ sudo mkdir -p /data/db

6

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

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

Отже, запустіть це замість ...

$ sudo mkdir -p /data/db

Це запропонує вам ввести пароль, це той самий пароль, який ви використовуєте для зміни системних налаштувань (той маленький діалогове вікно, яке відкриється при спробі та зміні речей у System Preferences для ecample), і, ймовірно, такий самий, як ви використовуєте для входу.


6

Ви намагаєтеся створити каталог, до якого ви не маєте кореневого доступу.

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

cd
mkdir -p temp/
mongod --dbpath .

Це зробить базу даних mongo в режимі temp / з вашого поточного робочого каталогу


6

Я вирішив цю саме проблему, створивши папки / data / db разом із своїм віконцем. Я спробував це робити, хоча спочатку термінал, і для того, щоб створити папку в кореневому каталозі, мені довелося використовувати sudo.

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

Примітка: я використовую OSX.


5

Просто коротка примітка:

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


це гарна примітка. У мене не було файлу блокування, але мені потрібно було змінити власника папки даних та db.
Caranicas

5

Створіть каталог у корені

sudo mkdir -p /data/db

Тепер поміняйте власника

sudo chown -R $USER /data

Вам добре піти!

mongod

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


4

Я намагався запустити mongodb.

"shutting down with code:100" 

Я використовував таку команду:

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

Мені виправлено те, що мені не знадобився знак "=", і це спричинило помилку. Так я і зробив

./mongod --dbpath ~/mongo-data

Просто хотів це викинути, бо помилка жодним чином не вказує, що це проблема. Я майже вилучив вміст каталогу ~ / mongo-data, щоб побачити, чи допомогло це. Радий, що я пам’ятав, що в арг-арках часом не використовується знак «=».


3

До цієї дати я також думав, що нам потрібно створити папку / data / db для запуску команди mongod.

Але нещодавно я спробував запустити mongod за допомогою сервісної команди, і це працювало на мене, і не було потреби в створенні каталогу / data / db.

service mongod start

Для перевірки стану mongod можна виконати наступну команду.

service mongod status

3

Це рішення вирішує мою проблему

  1. Зробіть каталог як

    sudo mkdir -p / data / db

  2. Це зробить каталог з іменем db і потім спробує почати з команд

    sudo mongod

Якщо ви отримаєте ще одну помилку або проблему з запуском mongod, ви можете виявити проблему як

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

ps ax | grep mongod
sudo kill ps_number

і знайти порт, який працює під керуванням, і вбити процес. Інший спосіб - це зробити особливий порт при запуску mongod як

sudo mongod --port 27018

2

На терміналі введіть "id", щоб побачити доступні ідентифікатори користувачів, а потім просто введіть

"sudo chown -R idname / data / db"

Це для мене вийшло! Сподіваємось, це вирішить вашу проблему.



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 "лише для читання", він побачить це


0

Є справді тупий спосіб створити цю проблему, який я піонерував:

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

Так, це дуже глупо, але якщо минуло деякий час, відколи ви були в системі, то це може вас подолати.

Коротка відповідь: переконайтеся, що у вас працює монго з тим самим маючи на увазі домашній каталог

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.