MongoDB: виняток у initAndListen: 20 Спроба створити файл блокування у каталозі, що доступний лише для читання: / data / db, завершення


146

Я створив /data/dbу кореневому каталозі і запустив ./mongod:

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] now exiting
[initandlisten] shutting down with code:100

4
виглядає як проблема з дозволом. Чи має користувач, який працює під управлінням mongod, мати дозвіл на запис у каталог / data / db? Поділіться результатами, ls -ld /data/dbі idтому ми можемо порадити.
Bjorn Roche

drwxr-xr-x 2 корінь кореня 4096
whinytween96

uid = 1000 (користувач) gid = 1000 (користувач) групи = 1000 (користувач), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween96

@BjornRoche дякую за -ldчастину :)
Skynet

@BjornRoche мій вихід, drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbі я все ще отримую помилку. Будь-які ідеї?
Блейк

Відповіді:


278

Проблема полягає в тому, що створена вами директорія /data/dbє власником кореневого користувача та її лише записує, але ви використовуєте mongod як себе. Існує кілька способів вирішити це, але в кінцевому підсумку ви повинні надати відповідній директорії потрібні дозволи. Якщо це для виробництва, я б радив вам перевірити документи і продумати це ретельно - ви, мабуть, хочете особливо подбати.

Однак якщо це лише для тестування, і вам це просто потрібно для роботи та продовження роботи, ви можете спробувати це, що зробить каталог доступним для всіх:

> sudo chmod -R go+w /data/db

або це дозволить зробити каталог, яким ви володієте:

> sudo chown -R $USER /data/db

4
Я думаю, що комусь може знадобитися -Rзмінювати всі /data/dbфайли всередині рекурсивно.
YongHao Hu

2
Дякую за це Спробував це і все-таки отримав ту саму помилку
Самуель Смів

1
Ця тема вже трохи стара, але для мене, використовуючи chmodнову помилку initAndListen : operation not permitted, але chownпрацювала.
bachinblack

chown зробив це і для мене
dwagnerkc

Погана практика давати 777 umask до каталогу. Можна встановити 755, і це працюєchmod -R 755 /data/db
Хуан-Кабалі

60

На Mac мені довелося зробити наступне:

sudo chown -R $USER /data/db
sudo chown -R $USER /tmp/

адже всередині нього також був файл, до /tmpякого Монго також потребував доступу


2
Працює у Fedora 28 Linux
Самуель Іван

2
Це повинно бути на вершині
Yashwanth Kambala

це зробило і для мене.
Canovice

25

Якщо ваша система використовує SELinux, переконайтеся, що ви використовуєте правильний контекст для створеного каталогу:

ls -dZ /data/db/
ls -dZ /var/lib/mongo/

і клонуйте контекст за допомогою:

chcon -R --reference=/var/lib/mongo /data/db

1
Ти врятував мій день! Дякую велике
Keerthivasan

2
ls -dZ / var / lib / mongodb / для пізніших версій mongo
espeed

17

Я відчув ту саму проблему, і наступне рішення вирішило цю проблему. Спробуйте наступне рішення.

sudo mkdir -p / data / db
sudo chown -R 'ім'я користувача' / data / db


9

введіть тут опис зображенняПерш за все, зупиніть усі служби mongoDB , потім створіть каталог /, це означає, що root, якщо у вас немає, також видаліть файл порту. надати весь дозвіл для цього каталогу, стати цим власником каталогу, запустіть команду нижче:

sudo service mongod stop
sudo rm -rf /tmp/mongod*
sudo mkdir -p /data/db
sudo chmod -R a+wxr /data
sudo chown -R $USER:$USER /data

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

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018

Примітка: Для мене все це працює і сподіваюся, що буде працювати для вас, хлопець!


5

Виправте дозволи /data/db(або /var/lib/mongodb):

sudo chown -R mongodb: /data/db

потім перезапустіть MongoDB, наприклад, використовуючи

sudo systemctl restart mongod

Якщо це не допомагає, перевірте повідомлення про помилку, якщо ви використовуєте каталог даних, відмінний від / var / lib / mongodb. У цьому випадку запустіть

sudo chown -R mongodb: <insert your data directory here>

джерело


4

Приємні рішення, але мені цікаво, чому ніхто не дає рішення для вікон.

Якщо ви використовуєте Windows, вам просто потрібно "Запустити як адміністратор" cmd.


6
Я думаю, це тому, що люди зазвичай не запускають сервери баз даних у Windows.
Блейк

1
Крім того, погана ідея запустити базу даних як адміністратор / root, ознайомтеся з іншими коментарями, подібними до цієї, для отримання детальної інформації
Nino

4

Якщо ви перевіряєте свої журнали mongodb, і ви отримуєте таку помилку, просто виконайте кроки, як я зробив. Це відбувається через проблеми з дозволом у вашому /data/dbкаталозі. Я використовую ubuntu16.04, і я знаходжу рішення із виконанням двох простих команд, як далі.

Крок 1: Надайте дозвіл директорії / data / db:

sudo chmod -R 0777 /data/db

Крок 2: Спробуйте запустити службу mongod як:

sudo service mongod start

Крок 3: Перевірте стан послуги mongod:

sudo service mongod status

2
Крок 1 надає всім користувачам дозволи на читання / запис / виконання. Це не слід використовувати.
Йонас Франц

Дякуємо, @JonasFranz, за Ваш відгук, тому в такому випадку ми можемо використовувати дозвіл 0755 для виробничого сервера. Будь ласка, виправте мене, якщо я помиляюся.
Jitendra

3

Якщо вам не потрібно мати каталоги бази даних у корені, ви можете створити їх data/dbу своєму домашньому каталозі ( mkdir -p ~/data/db).

Тоді ви можете запустити сервер MongoDB з --dbpathможливістю:

mongod --dbpath=$(echo ~)/data/db

(Це припущення, що ви починаєте його з терміналу. З якоїсь дивної причини mongodне сприймає ~ як шлях до домашнього каталогу, отже, хитрість заміни баш-ехо, ви також можете написати/home/yourusername/data/db )

Насправді це не повинно бути ~/data/db, воно може бути де завгодно, і таким чином ви можете мати декілька шляхів до бази даних та все добре організувати. Можливо, це не найкращий варіант для виробництва (залежно від того, що ви хочете зробити), але для розробки працює чудово.


3

Я вирішив ту ж проблему:

Перейдіть до каталогу MongoDB, який містить binкаталог, і запустіть:

sudo bin/mongod 

Запускаючи MongoDB як основного користувача, вас можуть попросити ввести кореневий пароль. Якщо ви все ще не можете запустити MongoDB, перевірте дозволи на каталог даних MongoDB. Введіть:

ls -ld /data

або введіть ls -l /дозволи для всіх каталогів і файлів у каталозі, включаючи /dataкаталог.

Режим дозволу для кореневого користувача повинен бути "rwx ", тобто користувач root може читати, записувати та виконувати файли. Щоб це сталося, ми використовуємо:

chmod 755 /data 

755- восьмеричне позначення для встановлення дозволів для /dataкаталогу на " rwxr-xr-x", що означає, що користувач root може читати, писати та виконувати, тоді як "група" та "всі" здатні лише читати та виконувати.

Примітка. Якщо цього не вдається, введіть:

sudo chmod 755 /data   

встановити дозвіл як користувач root.

Потім, виконавши цей крок, відновіть режими дозволу, використовуючи:

ls -ld /data

який повинен виглядати так:

drwxr-xr-x  3 root  wheel  102 Mar  3 17:00 /data

Вам не потрібно турбуватися про "d " на початку, і помітити, що дозволи відображають "rwxr-xr-x ".

Тепер ви можете повернутися до каталогу MongoDB і набрати:

sudo bin/mongod  

для запуску MongoDB.


2
Погана ідея, НІКОЛИ не запускайте це як судо. Є кращі рішення, які керують користувачем / групою mongod або mongodb залежно від вашого дистрибутива. Не використовуйте цей розчин.
Енді

2

вам просто потрібно запустити команду як супер користувач:

просто введіть з терміналу: sudo su mongod


1
Завжди погана ідея запускати такі програми, як суперпользователь. Краще зафіксувати дозволи папок
Джейсон

2

Якщо ви перебуваєте в Windows , і ви намагаєтеся встановити MongoDB, запустіть cmd, оскільки адміністратор - це шлях вперед, як запропонував Енріке вище, дивіться це тут


-1

Це працювало для мене в Ubuntu LTS 20.04:

$ sudo service mongod start

1
Поясніть, будь ласка, чому ви думаєте, що це буде працювати і для інших!
sauhardnc

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