MongoDB ไม่เริ่มทำงานหลังจากเปลี่ยนไดเรกทอรีข้อมูล


10

ฉันได้ติดตั้งmongodbอินสแตนซ์โดยใช้yum . ตอนนี้ทุกอย่างทำงานได้ดี service mongod startผมเริ่มใช้บริการ มันใช้งานได้ดี จากนั้นฉันเปลี่ยนdata directoryและlog pathในไฟล์กำหนดค่า ฉันรีสตาร์ทเซิร์ฟเวอร์อีกครั้งและเริ่มบริการ แต่ฉันได้รับข้อผิดพลาดด้านล่าง:

Restarting mongod (via systemctl):  Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
                                                           [FAILED]

เมื่อฉันให้systemctl status mongod.serviceฉันได้รับด้านล่าง:

 Loaded: loaded (/etc/rc.d/init.d/mongod)
   Active: failed (Result: exit-code) since Wed 2015-03-18 11:35:56 IST; 22s ago
  Process: 10672 ExecStop=/etc/rc.d/init.d/mongod stop (code=exited, status=0/SUCCESS)
  Process: 10841 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
 Main PID: 10509 (code=exited, status=0/SUCCESS)

Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Mar 18 11:35:56 localhost systemd[1]: Unit mongod.service entered failed state.

เมื่อฉันให้journalctl -xnฉันได้รับด้านล่าง:

-- Logs begin at Wed 2015-03-18 08:56:56 IST, end at Wed 2015-03-18 11:35:56 IST. --
Mar 18 11:30:01 localhost systemd[1]: Starting Session 20 of user root.
-- Subject: Unit session-20.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has begun starting up.
Mar 18 11:30:01 localhost systemd[1]: Started Session 20 of user root.
-- Subject: Unit session-20.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has finished starting up.
-- 
-- The start-up result is done.
Mar 18 11:30:01 localhost CROND[10712]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
-- Subject: Unit mongod.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mongod.service has begun starting up.
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

ใครสามารถช่วยฉันแก้ไขปัญหานี้ได้บ้าง ขอบคุณ !!!

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

คำตอบ:


6

ฉันพบปัญหาที่คล้ายกันและพบว่าเป็นmongod.confไฟล์ที่กำหนดค่าผิดพลาดในกรณีของฉัน อาจเป็นเพราะการอนุญาตในไดเรกทอรีใหม่นั้นไม่ได้ตั้งค่าไว้อย่างเหมาะสม chown -R mongod:mongod <directory name>เป็นวิธีที่ฉันรับประกันการเข้าถึง (และแน่นอนchmod 600 <dir>เช่นกัน) สุดท้ายให้เรียกใช้ls -Zเพื่อให้แน่ใจว่าบริบทนั้นถูกต้อง ฉันเพิ่งเปรียบเทียบกับไดเรกทอรีเริ่มต้นที่ใช้งานได้สำหรับฉัน

หากยังไม่ได้รับการแก้ไขโปรดแสดงเนื้อหาของไฟล์บันทึกของคุณด้วย อาจมีเบาะแสบ้าง


4

ขยายตัวในสิ่งที่ @mustaccio กล่าวว่าคำตอบสำหรับผมที่เป็นบริบท SELinux เกี่ยวกับใหม่และlogpath dbpathฉันรันคำสั่งต่อไปนี้และทุกอย่างก็ดี

sudo chcon -Rv --type=mongod_log_t $logpath
sudo chcon -Rv --type=mongod_var_lib_t $dbpath

(นี่คือ RHEL 7.1 btw)


4

ฉันมีสิ่งนี้ใน Raspberry Pi รวมถึงบนเซิร์ฟเวอร์ Ubuntu ของฉัน

“ งาน mongod.service ล้มเหลว ดู 'systemctl status mongod.service' และ 'journalctl -xn' เพื่อดูรายละเอียด”

ฉันมีปัญหานี้ในโอกาสที่แตกต่างกันด้วยเหตุผลที่แตกต่างกัน:

  1. Mis ชื่อไฟล์ .conf - สคริปต์ MongoDB (ซึ่งผมย้ายไป/etc/init.d/mongodb), สาย 57 เมื่อแฟ้มที่เกิดขึ้นจริงของฉันคือCONF=/etc/mongod.conf /etc/mongodb.confการเปลี่ยนบรรทัด 57 แก้ไขแล้ว นอกจากนี้ฉันสามารถเปลี่ยนชื่อสคริปต์ได้เหมือนกัน

  2. ไฟล์ mongod.lock - ครั้งล่าสุด mongod หยุดมันไม่ได้มีโอกาสปิดฐานข้อมูล mongod.lockใบนี้ไฟล์ในโฟลเดอร์ฐานข้อมูลของคุณที่เรียกว่า ข้างในโฟลเดอร์มีตัวเลข (ฉันเชื่อว่าเป็น PID ที่ mongo ใช้ล่าสุด) หากไฟล์นี้มีอยู่คุณจะไม่สามารถเริ่มบริการ mongod ได้ ลบไฟล์และลองอีกครั้ง

  3. ผู้ใช้ mongo - ฉันต้องการสร้างผู้ใช้ linux ที่รับผิดชอบในการเริ่มต้นและเรียกใช้ mongod.service ผมตั้งชื่อเหมือง Mongo และมีการปรับปรุงของฉัน/etc/init.d/mongodbสคริปต์สาย 95 DAEMONUSER=${DAEMONUSER:-mongo}สำหรับผมที่จะพูด แน่นอนนี้จะใช้งานได้เฉพาะเมื่อคุณสร้างผู้ใช้ใหม่ชื่อ mongo (หรืออะไรก็ตามที่คุณต้องการฉันคิด)

  4. สิทธิ์ DB - นี่คือหนึ่งที่นิยม เมื่อคุณประกาศตำแหน่งของโฟลเดอร์ฐานข้อมูลคุณจะต้องตรวจสอบให้แน่ใจว่าผู้ใช้ 'Mongo' ของคุณมีกรรมสิทธิ์ในไฟล์นั้น /data/dbยกตัวอย่างเช่นฐานข้อมูลของฉันจะถูกเก็บไว้ที่ ฉันรันคำสั่งต่อไปนี้
    sudo chown –R mongo:mongo /data
    และสิ่งนี้ได้ย้ายความเป็นเจ้าของ/dataและไดเรกทอรีย่อยทั้งหมดไปยังผู้ใช้ Mongo

  5. บริการผิด - อันนี้น่าอายสำหรับฉัน ผมพยายามที่จะเริ่มต้นเป็นบริการแทนmongo เป็นเชลล์ที่คุณสามารถรันและป้อนคำสั่งด้วยตนเองโดยตรงไปยัง Mongo นี่คือวิธีที่ฉันสร้างฐานข้อมูลของฉันและเพิ่มวัตถุสองสามตัวอย่าง ในอีกทางหนึ่งคือ mongo daemon ที่ทำงานในพื้นหลังโฮสต์ฐานข้อมูลของคุณสำหรับแอปพลิเคชันอื่น ๆ ที่คุณเขียน / ใช้เพื่อเข้าถึง ตรวจสอบให้แน่ใจว่าคุณไม่ได้รวมมันไว้ในไฟล์ conf สคริปต์และอื่น ๆmongodmongomongod

หวังว่าสิ่งเหล่านี้จะช่วยแก้ปัญหาให้คุณได้

ในบันทึกด้านข้างmongodb.confไฟล์ของฉันว่างเปล่า แม้ว่าจะว่างเปล่า แต่คุณต้องชี้ให้ถูกต้อง



1

ฉันพบปัญหาในการอัปเกรดจาก Mongo ที่มาพร้อมกับ Centos 7 Repos เป็น Mongos ของ repos ผลการอัพเกรดจาก V2 เป็น V3

ปรากฎว่า Centos 7 repo ต้องการผู้ใช้mongodbในขณะที่ Mongo เอง repo ต้องการผู้ใช้mongod

ในที่สุดมันเป็นไฟล์บันทึกที่ยังคงมีอยู่จากการติดตั้งเก่าที่การติดตั้งใหม่ไม่สามารถเขียนได้เพราะชื่อผู้ใช้นั้นแตกต่างกันและฉันไม่ได้สังเกต


1

ในระบบของฉัน (Fedora) ฉันมี "/ var / log" บน tmpfs (ram) ทุกครั้งที่ฉันรีบูตทุกสิ่งบนพาร์ติชันนั้นจะหายไป หลายคนทำสิ่งนี้เพราะมีไดรฟ์ SSD และต้องการลด I / O (ประหยัดอายุการใช้งานไดรฟ์)

วิธีแก้ไขคือการสร้างไดเร็กทอรี / var / log / mongodb และตั้ง mongodb เป็นเจ้าของทุกครั้งที่รีบูทระบบ

ใช้สคริปต์เช่น:

#!/bin/sh
sudo mkdir /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb

หากคุณไม่แน่ใจว่า mongod ที่ผู้ใช้ใช้คืออะไร:

cat /etc/passwd | grep mongo

เพิ่มสคริปต์ในการเริ่มต้นระบบของคุณ


0

คุณไม่ได้แก้ไขเส้นทาง ฉันแก้ไขปัญหาโดยคำสั่ง:

mongod --dbpath /data/mongo

0

นี่เป็นปัญหาสิทธิ์ เมื่อเราเปลี่ยนเส้นทางของไดเรกทอรีข้อมูลหรือไฟล์บันทึกแล้วเราจะต้องให้สิทธิ์กับไดเรกทอรีใหม่ จากนั้นก็จะทำงานได้ดี หากมีปัญหาใด ๆ เกิดขึ้นเช่นนี้ก่อนอื่นให้ตรวจสอบไฟล์บันทึก "mongod.log"


สิ่งนี้ไม่ได้ช่วยฉันให้สิทธิ์เต็มรูปแบบไปยังโฟลเดอร์ "บันทึก" แก่ผู้ใช้ที่ใช้บริการ mongod ฉันใช้ Windows Server 2016 ยังไม่สามารถเริ่มบริการใหม่ได้หลังจากเปลี่ยนเส้นทางไปยังล็อกไฟล์ยังคงได้รับ ข้อผิดพลาด: "บริการไม่ตอบสนองต่อฟังก์ชั่นการควบคุม" มีความคิดใดมั้ย
Eddie Kumar

0

หยุดเซิร์ฟเวอร์ MongoDB:

service mongod stop

คัดลอกไดเรกทอรี mongo ไปยังไดเรกทอรีใหม่:

rsync -av /var/lib/mongo /home/data/

เปลี่ยนชื่อไดเรกทอรีเก่า:

mv /var/lib/mongo /var/lib/mongo.bak

Symlink ไปยังตำแหน่งใหม่:

ln -s /home/data/mongo /var/lib/mongo

เริ่มเซิร์ฟเวอร์ MongoDB:

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