การเปลี่ยนไดเรกทอรีที่เก็บข้อมูล MongoDB


184

จนถึงตอนนี้ฉันยังไม่ได้ระบุไดเรกทอรีข้อมูล MongoDB และมีพาร์ติชันหลักเพียง 30 GB เท่านั้น

ฉันเพิ่งหมดพื้นที่และเพิ่มฮาร์ดดิสก์ใหม่ ฉันจะถ่ายโอนข้อมูลของฉัน (ที่เห็นได้ชัดใน/var/lib/mongodb/) และกำหนดค่า MongoDB เพื่อให้ทุกอย่างทำงานของดิสก์ใหม่โดยไม่ส่งผลกระทบต่อการติดตั้งปัจจุบันของฉันได้อย่างไร


คุณควรตรวจสอบให้แน่ใจว่าการอนุญาตใช้งานของคุณในจุดเชื่อมต่อใหม่มี r + x: sudo chmod o+rx /mediaตัวอย่างเช่นหากจุดเชื่อมต่อของmediaคุณ r + x จะต้องพร้อมใช้งานสำหรับกลุ่ม 'ผู้ใช้' และผู้ใช้จากจุดเชื่อมต่อแรก
Wordsforthewise

คำตอบ:


219

คำตอบสั้น ๆ คือ--dbpathพารามิเตอร์ใน MongoDB จะช่วยให้คุณสามารถควบคุมสิ่งที่ไดเรกทอรี MongoDB อ่านและเขียนข้อมูลจาก

mongod --dbpath / usr / local / mongodb-data

จะเริ่มต้น 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 Linux อย่างเป็นทางการ ( Ubuntu / DebianหรือCentOS / Fedora ) มาพร้อมกับไฟล์การกำหนดค่าพื้นฐานซึ่งวางไว้ใน/etc/mongodb.confนั้นและบริการ MongoDB จะอ่านสิ่งนี้เมื่อเริ่มทำงาน คุณสามารถเปลี่ยนแปลงได้ที่นี่


9
ในกล่อง debian ของฉันมัน mongodb.conf ไม่ใช่ mongod.conf
UpTheCreek

12
ฉันอัปเดต/etc/mongodb.confตามโซลูชันนี้ จากนั้นหลังจากเริ่มต้นmongodฉันเห็นว่า/data/dbมีการใช้งาน เหตุใดการอัพเดต mongodb.conf จึงไม่ส่งผลต่อที่ mongod จัดเก็บฐานข้อมูลไว้ (โปรดทราบว่าการใช้--dbpathอาร์กิวเมนต์ใช้งานได้
เควินเมเรดิ ธ

ในกล่อง Fedora ของฉันมันเป็น/etc/mongodb.confและการปรับปรุงที่ทำงานได้ดีสำหรับฉัน
tuxdna

4
ไดเร็กทอรีข้อมูลใหม่ต้องเป็นchown'd กับผู้ใช้ mongod สำหรับสคริปต์เริ่มบริการ
Pete Garafano

ฉันจะ chown อย่างไร
chovy

102

แก้ไขได้ในเวลาที่หยุดทำงาน 2 นาที :)
เพียงแค่ย้ายโฟลเดอร์ของคุณเพิ่ม symlink แล้วปรับแต่งการอนุญาต

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
ฉันคิดว่านี่ควรเป็นคำตอบ ฉันมักจะพบลิงก์สัญลักษณ์เพื่อเป็นทางออกที่ดีมากและฉันส่งเสริมโซลูชันที่ใช้การเปลี่ยนแปลงการกำหนดค่า ฯลฯ
guy mograbi

อาจไม่จำเป็นต้อง usodod คุณไม่มีสิทธิ์ในการ + 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ยัง
Andy

1
ฉันได้ลองวิธีแก้ปัญหาของคุณแล้ว แต่เมื่อฉันรีสตาร์ทแอปพลิเคชันมันให้ข้อผิดพลาดดังต่อไปนี้ - 2019-11-18T18: 58: 45.215 + 1100 I STORAGE ข้อยกเว้น [initandlisten] ใน initAndListen: 28596 ไม่สามารถระบุสถานะของไฟล์ล็อคในไดเรกทอรีข้อมูล / var / lib / mongo: boost :: filesystem :: สถานะ: การอนุญาตถูกปฏิเสธ: "/var/lib/mongo/mongod.lock", กำลังสิ้นสุด
Arun chauhan

33

คำสั่งต่อไปนี้จะทำงานให้คุณถ้าคุณต้องการเปลี่ยนเส้นทางเริ่มต้น เพียงพิมพ์สิ่งนี้ในช่องเก็บไดเรกทอรีของ mongodb

mongod --dbpath=yourdirectory\data\db

ในกรณีที่คุณต้องการย้ายข้อมูลที่มีอยู่แล้วเพียงคัดลอกโฟลเดอร์ทั้งหมดจากไดเรกทอรี data \ db ที่มีอยู่ไปยังไดเรกทอรีใหม่ก่อนที่คุณจะดำเนินการคำสั่ง

และยังหยุดบริการ mongodb ที่กำลังทำงานอยู่


1
สิ่งนี้ใช้ได้กับ Linux ด้วย ฉันได้สร้างไดเรกทอรีชื่อ "data" ถัดจากสคริปต์ mondod แล้วเรียกใช้เช่นนี้: ./mongod --dbpath = data
cagdasalagoz

29

สร้างไฟล์ชื่อ mongod.cfg ในโฟลเดอร์ MongoDB หากคุณไม่มีไฟล์ ในกรณีของฉัน: C: \ Users \ ivanbtrujillo \ MongoDB

จากนั้นแก้ไข mongod.cfg ด้วย notepad และเพิ่มบรรทัดต่อไปนี้ (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

หากคุณใช้ mongoDB เป็นบริการ windows คุณจะต้องเปลี่ยนคีย์นี้และระบุไฟล์ mongod.cfg

ในการติดตั้ง mongodb เป็นบริการ windows ให้รันคำสั่งนี้:

**"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**

เราระบุให้ mongo เป็นไฟล์ปรับแต่งและพา ธ ของมัน

จากนั้นเมื่อคุณเริ่มบริการ mongodb มันจะทำงาน

นี่คือบทแนะนำการติดตั้ง mongoDB ใน windows: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

หวังว่าจะช่วย


1
MongoDB 2.6 และใหม่กว่าใช้ไฟล์ config ของ YAML รูปแบบเก่ายังคงรองรับความเข้ากันได้ย้อนหลัง แต่คุณอาจต้องการใช้รูปแบบใหม่ รายละเอียดที่นี่
gronostaj

ตัวแปร 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 คุณสามารถเพิ่มสวิตช์นี้ในเชลล์สคริปต์ที่เริ่มต้น mongodb โดยทั่วไปจะเป็น /etc/init.d/mongod หรือ /etc/init.d/mongodb
lobster1234

19

นี่คือสิ่งที่ฉันทำหวังว่าจะเป็นประโยชน์กับคนอื่น:

ขั้นตอน:

  1. หยุดบริการของคุณที่ใช้ MongoDB
  2. หยุด mongod - วิธีการทำเช่นนี้กับไฟล์ rc ของฉัน/etc/rc.d/rc.mongod stopถ้าคุณใช้อย่างอื่นเช่น systemd คุณควรตรวจสอบเอกสารของคุณว่าจะทำอย่างไร
  3. สร้างไดเรกทอรีใหม่บนฮาร์ดดิสก์ใหม่ -mkdir /mnt/database
  4. ตรวจสอบให้แน่ใจว่า mongodb มีสิทธิ์อ่าน / เขียนจากไดเรกทอรีนั้น (ปกติchown mongodb:mongodb -R /mnt/database/mongodb) - ขอบคุณ @DanailGabenski
  5. คัดลอกโฟลเดอร์ข้อมูลของ MongoDB ของคุณไปยังตำแหน่งใหม่ -cp -R /var/lib/mongodb/ /mnt/database/
  6. ลบโฟลเดอร์ฐานข้อมูลเก่า -rm -rf /var/lib/mongodb/
  7. สร้างลิงก์สัญลักษณ์ไปยังโฟลเดอร์ฐานข้อมูลใหม่ -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. เริ่ม mongod -/etc/rc.d/rc.mongod start
  9. ตรวจสอบบันทึกของ mongod ของคุณและทำการตรวจสอบสติ (ลองmongoเชื่อมต่อกับฐานข้อมูลของคุณเพื่อดูว่าทุกอย่างเรียบร้อย)
  10. เริ่มบริการของคุณที่คุณหยุดในจุดที่ 1

ไม่จำเป็นต้องบอกว่าคุณควรระวังเมื่อคุณทำสิ่งนี้โดยเฉพาะด้วยrm -rfแต่ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดที่จะทำ

คุณไม่ควรพยายามคัดลอกฐานข้อมูลในขณะที่ mongod กำลังทำงานอยู่เพราะอาจมีบริการที่เขียน / อ่านจากมันซึ่งจะเปลี่ยนเนื้อหาของฐานข้อมูลของคุณ


1
แม้ว่าจะมีคำตอบเก่า แต่ก็ใช้ได้ผลกับฉันเพียงบางส่วน คุณต้องแน่ใจว่าผู้ใช้ mongodb เป็นเจ้าของไดเรกทอรีใหม่และ symlik เพื่อให้มันใช้งานได้ chown mongodb:mongodb -R /mnt/database/mongodb
Danail Gabenski

3
เมื่อถึงจุดที่ 5 ให้ใช้คำสั่งเพื่อให้ดูเหมือน cp -rp / var / lib / mongodb / / mnt / database / สิ่งนี้จะรักษาความเป็นเจ้าของและได้รับอนุญาตจากโฟลเดอร์เหมือนเดิม
Ketan Ghumatkar

ฉันได้ลองวิธีแก้ปัญหาของคุณแล้ว แต่เมื่อฉันรีสตาร์ทแอปพลิเคชันมันให้ข้อผิดพลาดดังต่อไปนี้ - 2019-11-18T18: 58: 45.215 + 1100 I STORAGE ข้อยกเว้น [initandlisten] ใน initAndListen: 28596 ไม่สามารถระบุสถานะของไฟล์ล็อคในไดเรกทอรีข้อมูล / var / lib / mongo: boost :: filesystem :: status: การอนุญาตถูกปฏิเสธ: "/var/lib/mongo/mongod.lock", การยกเลิก
Arun chauhan

10

หากติดตั้งผ่านapt-getใน Ubuntu 12.04, chown -R mongodb:nogroup /path/to/new/directoryไม่ลืมที่จะ /etc/mongodb.confนอกจากนี้ยังเปลี่ยนการตั้งค่าที่

เพื่อเป็นการเตือนความจำmongodb-10genแพคเกจเริ่มต้นจากการพุ่งพรวดดังนั้นสคริปต์การกำหนดค่าจึงอยู่ใน/etc/init/mongodb.conf

ฉันเพิ่งผ่านสิ่งนี้ไปหวังว่าชาว Google จะพบว่ามีประโยชน์ :)


1

สำหรับฉันผู้ใช้mongodแทนmongodb

sudo chown mongod:mongod /newlocation

คุณสามารถดูบันทึกข้อผิดพลาดหากบริการล้มเหลว:

/var/log/mongodb/mongod.log


0

ใน debian / 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"}

ถ้าคุณต้องการใส่ฐานข้อมูลในโฮมไดเร็กตอรี่ของคุณแทนที่จะเป็นรูท?
JesseBoyd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.