MongoDB: initAndListen में अपवाद: 20 रीड-ओनली डायरेक्टरी पर लॉक फाइल बनाने का प्रयास: / डाटा / डीबी, समाप्त करना


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
अनुमति समस्या की तरह दिखता है। क्या मोंगॉड चलाने वाले को / data / db डायरेक्टरी में लिखने की अनुमति है? का उत्पादन साझा करें ls -ld /data/dbऔर idइसलिए हम सलाह दे सकते हैं।
ब्योर्न रोश

drwxr-xr-x 2 रूट रूट 4096
whinytween96

uid = 1000 (उपयोगकर्ता) gid = 1000 (उपयोगकर्ता) समूह = 1000 (उपयोगकर्ता), 4 (प्रशंसा), 24 (cdrom), 27 (sudo), 30 (डुबकी), 46 (प्लगदेव), 113 (lpadmin), 128 (
सांभरशेयर

@BjornRoche -ldभाग के लिए धन्यवाद :)
Skynet

@BjornRoche मेरा आउटपुट है drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbऔर मुझे अभी भी त्रुटि मिल रही है। कोई विचार?
ब्लेक

जवाबों:


278

समस्या यह है कि आपने जो निर्देशिका बनाई है, /data/dbउसके पास केवल रूट उपयोगकर्ता का स्वामित्व है, लेकिन आप स्वयं के रूप में मोंगॉड चला रहे हैं। इसे हल करने के कई तरीके हैं, लेकिन आखिरकार, आपको सही अनुमतियों के लिए निर्देशिका देनी होगी। यदि यह उत्पादन के लिए है, तो मैं आपको डॉक्स की जांच करने और इस पर सावधानी से विचार करने की सलाह दूंगा - आप शायद विशेष ध्यान रखना चाहते हैं।

हालाँकि, अगर यह सिर्फ परीक्षण के लिए है और आपको बस इस पर काम करने और इसे प्राप्त करने की आवश्यकता है, तो आप इसे आज़मा सकते हैं, जो निर्देशिका को सभी के लिए योग्य बना देगा:

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

या यह, जो आपके द्वारा निर्देशिका का स्वामित्व बनाएगा:

> sudo chown -R $USER /data/db

4
मुझे लगता है कि किसी को पुनरावर्ती अंदर -Rसभी /data/dbफ़ाइलों को बदलने की आवश्यकता हो सकती है ।
योंगहो हू

2
इसके लिए धन्यवाद। इसकी कोशिश की और अभी भी वही त्रुटि हो रही है
शमूएल डेयर

1
यह विषय पहले से ही थोड़ा पुराना है, लेकिन मेरे लिए, chmodएक नई त्रुटि उत्पन्न करता है initAndListen : operation not permitted, लेकिन chownकाम किया।
बछिनब्लाक

मेरे लिए यह
चाउ

यह एक निर्देशिका के लिए 777 umask देने के लिए एक बुरा अभ्यास है। आप 755 सेट कर सकते हैं और यह काम करता हैchmod -R 755 /data/db
जुआन-कबाली

60

एक मैक पर, मुझे निम्नलिखित कार्य करने थे:

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

क्योंकि वहाँ एक फ़ाइल /tmpभी थी जिसके अंदर मोंगो को भी पहुँच की आवश्यकता थी


2
फेडोरा 28 लिनक्स में काम करता है
सैमुअल इवान

2
यह शीर्ष पर होना चाहिए
यशवंत कंबाला

यह मेरे लिए भी किया।
कैनोविस

25

यदि आपका सिस्टम SELinux का उपयोग कर रहा है, तो सुनिश्चित करें कि आपने जो निर्देशिका बनाई है, उसके लिए आप सही संदर्भ का उपयोग करें:

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

और इस संदर्भ को क्लोन करें:

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

1
आपने मेरा दिन बचाया! बहुत
कीर्तिवासन

2
ls -dZ / var / lib / mongodb / बाद के संस्करणों के लिए
mongo

17

मैंने उसी समस्या का अनुभव किया और निम्नलिखित समाधान ने इस समस्या को हल किया। आपको निम्नलिखित समाधान की कोशिश करनी चाहिए।

sudo mkdir -p / data / db
sudo chown -R 'यूज़रनेम' / डेटा / डीबी


9

यहां छवि विवरण दर्ज करेंसबसे पहले सभी mongoDB सेवाओं को बंद करें , फिर एक निर्देशिका बनाएं /, इसका अर्थ है रूट, यदि आपके पास नहीं है, और पोर्ट को भी हटा दें। उस निर्देशिका को सभी अनुमति दें, वह निर्देशिका स्वामी बनें, कमांड से नीचे चलाएं:

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

अच्छा समाधान है, लेकिन मुझे आश्चर्य है कि कोई भी खिड़कियों के लिए समाधान क्यों नहीं दे रहा है।

यदि आप विंडोज़ का उपयोग कर रहे हैं, तो आपको बस "प्रशासक के रूप में चलाएं" cmd करना होगा।


6
मुझे लगता है कि यह इसलिए है क्योंकि लोग आमतौर पर विंडोज पर डेटाबेस सर्वर नहीं चलाते हैं।
ब्लेक

1
इसके अलावा, एक डेटाबेस को व्यवस्थापक / रूट के रूप में चलाने के लिए यह एक बुरा विचार है, अन्य टिप्पणियों को यहां अधिक विवरण के लिए इस तरह से
जांचें

4

यदि आप अपने मोंगोडब लॉग की जांच कर रहे हैं और आपको ऐसी त्रुटि हो रही है, तो बस चरणों का पालन करें जैसा कि मैंने किया था। यह आपकी /data/dbनिर्देशिका के साथ अनुमति समस्याओं के कारण होता है । मैं ubuntu16.04 का उपयोग कर रहा हूं और मुझे दो सरल कमांड चलाने के साथ समाधान मिल गया है।

चरण 1: / डेटा / डीबी निर्देशिका को अनुमति दें:

sudo chmod -R 0777 /data/db

चरण 2: के रूप में मंगोल सेवा शुरू करने की कोशिश करें:

sudo service mongod start

चरण 3: मंगोल सेवा की स्थिति देखें:

sudo service mongod status

2
चरण 1 सभी उपयोगकर्ताओं को अनुमतियाँ पढ़ने / लिखने / निष्पादित करने के लिए अनुदान देगा। इसका उपयोग नहीं किया जाना चाहिए।
जोनास फ्रांज

धन्यवाद, @JonasFranz, आपकी प्रतिक्रिया के लिए, इसलिए उस स्थिति में, हम उत्पादन सर्वर के लिए 0755 अनुमति का उपयोग कर सकते हैं। अगर मैं गलत हूं कृपया मुझे सही।
जितेंद्र

3

यदि आपको डेटाबेस निर्देशिकाओं को रूट में रखने की आवश्यकता नहीं है, तो आप data/dbअपने होम निर्देशिका ( mkdir -p ~/data/db) में बना सकते हैं ।

तब आप --dbpathविकल्प के साथ MongoDB सर्वर शुरू कर सकते हैं :

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" होना चाहिए , जिसका अर्थ है कि रूट उपयोगकर्ता फ़ाइलों को पढ़ने, लिखने और निष्पादित करने में सक्षम है। ऐसा करने के लिए, हम उपयोग करते हैं:

chmod 755 /data 

755अनुमतियों /dataको " rwxr-xr-x" में सेट करने के लिए एक ऑक्टल नोटेशन है , जिसका अर्थ है कि रूट उपयोगकर्ता पढ़ सकता है, लिख सकता है और निष्पादित कर सकता है, जबकि "समूह" और "हर कोई" केवल पढ़ने और निष्पादित करने में सक्षम हैं।

नोट: जब आप ऐसा नहीं कर सकते, तो इसके बजाय टाइप करें:

sudo chmod 755 /data   

रूट उपयोगकर्ता के रूप में अनुमति सेट करने के लिए।

फिर, जब उस चरण के साथ किया जाता है, तो अनुमति मोड का उपयोग करके हटा दें:

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
बुरा विचार, कभी इसे sudo के रूप में चलाएं। बेहतर समाधान हैं जो उपयोगकर्ता / समूह को आपके डिस्ट्रो के आधार पर मोंगॉड या मोंगोडब का प्रबंधन करते हैं। इस घोल का उपयोग न करें।
एंडी

2

आपको बस एक सुपर उपयोगकर्ता के रूप में कमांड चलाने की आवश्यकता है:

टर्मिनल से सिर्फ टाइप करें: sudo su mongod


1
यह हमेशा एक सुपरयूजर के रूप में इस तरह प्रोग्राम चलाने के लिए एक बुरा विचार है। फ़ोल्डरों की अनुमति को ठीक करने के लिए बेहतर है
जेसन

2

यदि आप Windows पर हैं , और आप MongoDB सेटअप करने की कोशिश कर रहे हैं, तो cmd को चलाएं क्योंकि Admnistrator आगे बढ़ने का तरीका है जैसा कि Enrique ने सुझाव दिया है कि इसे यहां देखें


-1

इसने मेरे लिए Ubuntu LTS 20.04 में काम किया:

$ sudo service mongod start

1
कृपया समझाएं, आपको क्यों लगता है कि यह दूसरों के लिए भी काम करेगा!
sauhardnc

1
कृपया अधिक विवरण के साथ अधिक विवरण में रिज़ॉल्यूशन का वर्णन करें जैसे कि वास्तविक कारण की व्याख्या करते हुए, आपको मुद्दों को मिटाने के लिए कार्य कोड स्निपेट और प्रदर्शन करने के लिए चरण जोड़ें। अधिक जानकारी के लिए StackOverflow के दिशानिर्देश देखें।
कपिल रघुवंशी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.