MongoDB डेटा स्टोर निर्देशिका को बदलना


183

अब तक मैं एक MongoDB डेटा निर्देशिका को निर्दिष्ट नहीं कर रहा हूं और केवल 30 जीबी प्राथमिक विभाजन हुआ है।

मैं बस अंतरिक्ष से बाहर भागा और एक नई हार्ड डिस्क जोड़ी। मैं अपना डेटा (जो कि जाहिरा तौर पर /var/lib/mongodb/) में स्थानांतरित कर सकता हूं और MongoDB को कॉन्फ़िगर कर सकता हूं ताकि मेरे मौजूदा इंस्टॉलेशन को प्रभावित किए बिना सब कुछ नई डिस्क से चला जाए?


आपको यह भी सुनिश्चित करना चाहिए कि नए आरोह बिंदु पर आपकी अनुमतियाँ r + x हैं: sudo chmod o+rx /mediaउदाहरण के लिए यदि आपका आरोह बिंदु है media। R + x को पहले माउंट बिंदु से 'अन्य' समूहों और उपयोगकर्ताओं के लिए उपलब्ध होने की आवश्यकता है।
शब्दफोर्ट वाइज

जवाबों:


219

संक्षिप्त उत्तर यह है कि --dbpathMongoDB में पैरामीटर आपको यह नियंत्रित करने की अनुमति देगा कि MongoDB किस निर्देशिका को पढ़ता है और इससे डेटा लिखता है।

mongod --dbpath / usr / स्थानीय / मंगोलोड-डेटा

Mongodb शुरू करेंगे और फाइलों को अंदर रखेंगे /usr/local/mongodb-data

आपके वितरण और MongoDB स्थापना के आधार पर, आप mongod.confस्वचालित रूप से ऐसा करने के लिए फ़ाइल को कॉन्फ़िगर कर सकते हैं :

# Store data in /usr/local/var/mongodb instead of the default /data/db
dbpath = /usr/local/var/mongodb

आधिकारिक 10gen लिनक्स पैकेज ( उबंटू / डेबियन या सेंटोस / फेडोरा ) एक बुनियादी कॉन्फ़िगरेशन फ़ाइल के साथ जहाज है जिसे अंदर रखा गया है /etc/mongodb.conf, और जब यह शुरू होता है तो MongoDB सेवा इसे पढ़ती है। आप यहां अपना बदलाव कर सकते हैं।


9
मेरे डेबियन बॉक्स पर यह mongodb.conf है, mongod.conf नहीं है
UpTheCreek

12
मैंने /etc/mongodb.confइस समाधान के अनुसार अद्यतन किया । फिर, शुरू करने के बाद mongod, मैंने देखा कि /data/dbइसका इस्तेमाल किया गया था। Mongodb.conf को अपडेट करना क्यों प्रभावित नहीं करता है जहाँ mongod ने db को संग्रहीत किया है? (ध्यान दें कि --dbpathतर्क का उपयोग करते हुए काम किया गया।
केविन मेरेडिथ

मेरे फेडोरा बॉक्स पर यह /etc/mongodb.confअपडेट है और मेरे लिए ठीक काम करता है।
tuxdna

4
नई डेटा निर्देशिका chownको सेवा शुरू करने की स्क्रिप्ट के लिए मोंगॉड उपयोगकर्ता के लिए होना चाहिए ।
पीट गारफानो

मैं कैसे करूँ?
चॉवी

102

इसे 2 मिनट डाउनटाइम में हल किया गया :)
बस अपने फ़ोल्डर को स्थानांतरित करें, सिमिलिंक जोड़ें, फिर ट्यून की अनुमति दें।

sudo service mongod stop
sudo mv mongodb /new/disk/mongodb/
sudo ln -s /new/disk/mongodb/ /var/lib/mongodb
sudo chown mongodb:mongodb /new/disk/mongodb/
sudo service mongod start

# test if mongodb user can access new location:
sudo -u mongodb -s cd /new/disk/mongodb/
# resolve other permissions issues if necessary
sudo usermod -a -G <newdisk_grp> mongodb

3
मुझे लगता है कि इसका जवाब होना चाहिए। मुझे हमेशा प्रतीकात्मक संबंध एक बहुत अच्छे समाधान के रूप में मिलते हैं और मैं किसी भी समाधान को बढ़ावा देता हूं जो उन्हें बदलते विन्यास आदि पर उपयोग करता है।
लड़का मोगरी

शायद हमारे लिए कोई जरूरत नहीं है। आपको dbpath के पेड़ पर "अन्य" उपयोगकर्ताओं के लिए + x निष्पादन योग्य अनुमति याद आ रही है chmod -R o+x /<home>। देखें: stackoverflow.com/a/38193187/205049
oori

मैं इन निर्देशों का पालन करता हूं (किसी अन्य डिस्क में dbpath का उपयोग करते हुए), मैं अभी भी यही कर रहा हूं कि Permission denied: "/var/lib/mongodb"यह कैसे है /home/../mongodb/mongodb/ जैसा दिखता है:drwxrwxr-x 3 mongodb mongodb 4096 oct 13 09:32 ../ drwxr-xr-x 2 mongodb nogroup 4096 oct 13 09:29 journal/ -rw------x 1 mongodb nogroup 67108864 sep 23 14:44 local.0* -rw------x 1 mongodb nogroup 16777216 sep 23 14:44 local.ns* -rwxr-xr-x 1 mongodb mongodb 0 oct 13 09:29 mongod.lock*
Machinerium

1
जब आप mvकमांड चलाते हैं , तो आप किस फ़ोल्डर में हैं, इसके लिए स्पष्टीकरण की आवश्यकता है , यदि आप mv कमांड को lib के भीतर से चलाते हैं, तो आपके पास अब mongodb करने के lnलिए नहीं है
एंडी

1
मैंने आपके समाधान की कोशिश की है, लेकिन जब मैं इस त्रुटि के बाद आवेदन को पुनः आरंभ कर रहा हूं - 2019-11-18T18: 58: 45.215 + 1100 I STORAGE [initandlisten] अपवाद initAndListen: 28596 डेटा निर्देशिका में लॉक फ़ाइल की स्थिति निर्धारित करने में असमर्थ / var / lib / mongo: बढ़ावा :: filesystem :: स्थिति: अनुमति से इनकार किया: "/var/lib/mongo/mongod.lock", समाप्त
अरुण चौहान

32

यदि आप डिफ़ॉल्ट पथ बदलना चाहते हैं, तो निम्न कमांड आपके लिए काम करेगी। बस इसे मोंगोडब की बिन निर्देशिका में टाइप करें।

mongod --dbpath=yourdirectory\data\db

यदि आप मौजूदा डेटा को भी स्थानांतरित करना चाहते हैं, तो कमांड को निष्पादित करने से पहले बस सभी फ़ोल्डर्स को मौजूदा डेटा \ db निर्देशिका से नई निर्देशिका में कॉपी करें।

और मौजूदा मोंगोडब सेवाओं को भी बंद करें जो चल रही हैं।


1
यह लिनक्स पर भी काम करता है। मैंने मॉन्डोड स्क्रिप्ट के आगे "डेटा" नामक एक निर्देशिका बनाई है और इसे इस तरह से चलाया है: ./mongod --dbpath = data
cagdasalagoz

29

यदि आपके पास न हो तो MongoDB फ़ोल्डर में mongod.cfg नामक फ़ाइल बनाएं। मेरे मामले में: C: \ Users \ ivanbtrujillo \ MongoDB

फिर, नोटपैड के साथ mongod.cfg को संपादित करें और निम्नलिखित के साथ एक पंक्ति जोड़ें (हमारे कस्टम dbpath):

dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

इस फ़ाइल में आपको logpath को भी स्पष्ट करना चाहिए। मेरी mongod.cfg फ़ाइल है:

logpath=C:\Users\ivanbtrujillo\MongoDB\log\mongo.log
dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

यदि आप Windows सेवा के रूप में mongoDB का उपयोग करते हैं, तो आपको इस कुंजी को बदलना होगा और mongod.cfg फ़ाइल को निर्दिष्ट करना होगा।

एक विंडोज़ सेवा के रूप में मोंगोडब स्थापित करने के लिए इस कमांड को चलाएं:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" install**

Regedit.exe खोलें और निम्न मार्ग पर जाएं:

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB

MongoDB सेवा काम नहीं करती है, हमें ImagePath कुंजी को संपादित करना है, इसकी सामग्री को हटाना है और निम्नलिखित रखना है:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" 
--logpath="C:\Users\ivanbtrujillo\MongoDB\log\mongo.log" service**

हम मूंगो को इंगित करते हैं कि यह कॉन्फिग फाइल और इसकी लॉगपथ है।

फिर जब आप मेनगोडब सेवा को निष्क्रिय करते हैं, तो यह काम करता है।

यहाँ विंडोज़ में mongoDB स्थापित करने के लिए एक पूर्ण ट्यूटोरियल है: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

आशा करता हूँ की ये काम करेगा,


1
MongoDB 2.6 और नए उपयोग YAML विन्यास फाइल। पुराने प्रारूप को अभी भी बैकवर्ड संगतता के लिए समर्थित है, लेकिन आप नए का उपयोग करना चाह सकते हैं। विवरण यहाँ है
गोनोस्तज

dbpath वैरिएबल linux के लिए भी मौजूद है। /Etc/mongod.conf में देखें।
xpros

23

की सामग्री की प्रतिलिपि /var/lib/mongodbकरने के लिए /data/db। जिन फ़ाइलों को आप ढूंढ रहे हैं उनमें नाम होना चाहिए your_db_name.nsऔर your_dbname.nजहां nएक संख्या है जिसका प्रारंभ 0. है। यदि आप ऐसी फ़ाइलों को नीचे नहीं देखते हैं /var/lib/mongodb, तो उन्हें अपने फ़ाइल सिस्टम पर खोजें।

एक बार कॉपी करने के बाद, कमांड के --dbpath=/data/dbमाध्यम से MongoDB शुरू करते समय उपयोग करें mongod


क्या सर्वर रिस्टार्ट होने पर हर बार ऐसा होने का कोई तरीका है?
user4951

1
@JimThio आप इस स्विच को शेल स्क्रिप्ट में जोड़ सकते हैं जो मोंगोडब शुरू करता है। आमतौर पर यह /etc/init.d/mongod या /etc/init.d/mongodb है।
लॉबस्टर 1234 21

19

यहाँ मैंने क्या किया है, आशा है कि यह किसी और के लिए उपयोगी है:

कदम:

  1. अपनी सेवाओं को रोकें जो मंगोलोड का उपयोग कर रही हैं
  2. बंद करो mongod - ऐसा करने का मेरा तरीका मेरी आरसी फ़ाइल के साथ था /etc/rc.d/rc.mongod stop, अगर आप कुछ और उपयोग करते हैं, तो सिस्टमड की तरह आपको अपने दस्तावेज़ की जांच करनी चाहिए कि कैसे करना है
  3. ताजा हार्डडिस्क पर एक नई निर्देशिका बनाएं -mkdir /mnt/database
  4. सुनिश्चित करें कि मोंगॉडब के पास उस निर्देशिका (आमतौर पर chown mongodb:mongodb -R /mnt/database/mongodb) से पढ़ने / लिखने के विशेषाधिकार हैं - धन्यवाद @ डानेलगैबेंस्की।
  5. अपने स्थान के डेटा फ़ोल्डर को नए स्थान पर कॉपी करें -cp -R /var/lib/mongodb/ /mnt/database/
  6. पुराने डेटाबेस फ़ोल्डर को निकालें -rm -rf /var/lib/mongodb/
  7. नए डेटाबेस फ़ोल्डर का प्रतीकात्मक लिंक बनाएं -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. मूंगोद शुरू करें -/etc/rc.d/rc.mongod start
  9. अपने मोंगॉड के लॉग की जांच करें और कुछ पवित्रता की जाँच करें ( mongoयह देखने के लिए अपने डेटाबेस से कनेक्ट करने का प्रयास करें कि क्या सब कुछ ठीक है)
  10. अपनी सेवाओं को शुरू करें जिसे आपने बिंदु 1 में रोक दिया था

यह बताने की आवश्यकता नहीं है कि ऐसा करते समय आपको सावधानी बरतनी चाहिए, rm -rfलेकिन विशेष रूप से, लेकिन मुझे लगता है कि ऐसा करने का यह सबसे अच्छा तरीका है।

जब भी मोंगॉड चल रहा हो, तो आपको डेटाबेस को कॉपी करने की कोशिश नहीं करनी चाहिए, क्योंकि ऐसी सेवाएँ हो सकती हैं जो इससे लिख / पढ़ लें जो आपके डेटाबेस की सामग्री को बदल देगी।


1
हालांकि एक पुराना जवाब, यह मेरे लिए आंशिक रूप से काम करता था। आपको यह सुनिश्चित करने की भी आवश्यकता है कि मोंगॉडब उपयोगकर्ता नई निर्देशिका और सिमिलिक का मालिक है ताकि वह काम कर सके। chown mongodb:mongodb -R /mnt/database/mongodb
डैनियल गैबेंस्की

3
बिंदु 5 पर, cp -rp / var / lib / mongodb / / mnt / database / जैसा दिखने के लिए कमांड बनाएं / इससे फ़ोल्डर का स्वामित्व और अनुमति बरकरार रहेगी।
केतन घुमतकर

मैंने आपके समाधान की कोशिश की है, लेकिन जब मैं इस त्रुटि के बाद आवेदन को पुनः आरंभ कर रहा हूं - 2019-11-18T18: 58: 45.215 + 1100 I STORAGE [initandlisten] अपवाद initAndListen: 28596 डेटा निर्देशिका में लॉक फ़ाइल की स्थिति निर्धारित करने में असमर्थ / var / lib / mongo: बढ़ावा :: filesystem :: स्थिति: अनुमति से इनकार किया: "/var/lib/mongo/mongod.lock", समाप्त
अरुण चौहान

10

apt-getUbuntu 12.04 के माध्यम से स्थापित किया गया है , तो भूल नहीं है chown -R mongodb:nogroup /path/to/new/directory। इसके अलावा, कॉन्फ़िगरेशन बदलें /etc/mongodb.conf

एक अनुस्मारक के रूप में, mongodb-10genपैकेज अब अपस्टार्ट के माध्यम से शुरू किया गया है, इसलिए कॉन्फ़िगरेशन स्क्रिप्ट में है/etc/init/mongodb.conf

मैं बस इस के माध्यम से चला गया, आशा है कि googler इसे उपयोगी पाते हैं :)


1

मेरे लिए, उपयोगकर्ता के mongodबजाय थाmongodb

sudo chown mongod:mongod /newlocation

यदि सेवा विफल हो जाती है, तो आप त्रुटियों के लिए लॉग देख सकते हैं:

/var/log/mongodb/mongod.log


0

डेबियन / ubuntu में, आपको /etc/init.d/mongodb स्क्रिप्ट को संपादित करना होगा। वास्तव में, इस फ़ाइल को /etc/mongodb.conf से सेटिंग खींचनी चाहिए लेकिन यह डिफ़ॉल्ट निर्देशिका (शायद बग) को खींचती नहीं दिखती है

यह थोड़ा हैक है, लेकिन इनको स्क्रिप्ट में जोड़कर इसे सही तरीके से शुरू किया गया:

जोड़ें:

DBDIR=/database/mongodb

परिवर्तन:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"}

सेवा:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}

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