MongoDB: exception ใน 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 (จุ่ม), 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
Juan-Kabbali

60

สำหรับ Mac ฉันต้องทำสิ่งต่อไปนี้:

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

เพราะมีไฟล์อยู่ข้างใน/tmpซึ่ง Mongo ต้องการการเข้าถึงด้วย


2
ทำงานได้ใน Fedora 28 Linux
Samuel Ivan

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 ทั้งหมดจากนั้นสร้างไดเรกทอรีบน/ซึ่งหมายถึงรูทหากคุณไม่มีและลบไฟล์พอร์ตด้วย ให้สิทธิ์ทั้งหมดในไดเรกทอรีนั้นให้เป็นเจ้าของไดเรกทอรีนั้นเรียกใช้คำสั่งด้านล่าง:

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

หากคุณใช้ windows คุณเพียงแค่ต้อง "Run as Administrator" the cmd


6
ฉันคิดว่าเป็นเพราะคนทั่วไปไม่ได้ใช้เซิร์ฟเวอร์ฐานข้อมูลบน Windows
เบลค

1
นอกจากนี้ยังเป็นความคิดที่ดีที่จะใช้ฐานข้อมูลในฐานะผู้ดูแลระบบ / รูทตรวจสอบความคิดเห็นอื่น ๆ ได้ที่นี่เช่นนี้เพื่อรับรายละเอียดเพิ่มเติม
Nino Filiu

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 จะให้สิทธิ์การอ่าน / เขียน / ดำเนินการแก่ผู้ใช้ทั้งหมด สิ่งนี้ไม่ควรใช้
Jonas Franz

ขอบคุณ @JonasFranz สำหรับความคิดเห็นของคุณดังนั้นในกรณีนั้นเราสามารถใช้สิทธิ์ 0755 สำหรับเซิร์ฟเวอร์ที่ใช้งานจริง โปรดแก้ไขฉันหากฉันผิด
Jitendra

3

หากคุณไม่จำเป็นต้องมีไดเรกทอรีฐานข้อมูลในรูทคุณสามารถสร้างdata/dbในโฮมไดเร็กตอรี่ของคุณ ( mkdir -p ~/data/db)

จากนั้นคุณสามารถเริ่มต้นเซิร์ฟเวอร์ MongoDB ด้วย--dbpathตัวเลือก:

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

(นี่คือการสมมติว่าคุณกำลังเริ่มต้นจากเทอร์มินัลด้วยเหตุผลแปลก ๆ บางอย่างmongodไม่ยอมรับ ~ เป็นพา ธ ของโฮมไดเร็กตอรี่ดังนั้นการใช้ bash echo แทนการใช้กลอุบายคุณอาจเขียนได้เช่นกัน/home/yourusername/data/db)

ในความเป็นจริงมันไม่จำเป็นต้องเป็น~/data/dbได้ทุกที่ที่คุณต้องการและด้วยวิธีนี้คุณสามารถมีฐานข้อมูลหลายเส้นทางและจัดการทุกอย่างได้อย่างดี อาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับการผลิต (ขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ) แต่สำหรับการพัฒนาผลงานได้ดี


3

ฉันจัดการกับปัญหาเดียวกัน:

เปลี่ยนเป็นไดเร็กทอรี MongoDB ซึ่งมีbinไดเร็กทอรีและรัน:

sudo bin/mongod 

รัน MongoDB ในฐานะผู้ใช้รูทคุณอาจถูกขอให้ป้อนรหัสผ่านรูท หากคุณยังไม่สามารถเรียกใช้ MongoDB ได้ให้ตรวจสอบการอนุญาตสำหรับไดเรกทอรีข้อมูลของ MongoDB Enter:

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 มีวิธีแก้ปัญหาที่ดีกว่าที่จัดการผู้ใช้ / กลุ่มเพื่อ mongod หรือ mongodb ขึ้นอยู่กับ distro ของคุณ อย่าใช้วิธีนี้
Andy

2

คุณเพียงแค่ต้องเรียกใช้คำสั่งในฐานะผู้ใช้ขั้นสูง:

เพียงพิมพ์จากเทอร์มินัล: sudo su mongod


1
มันเป็นความคิดที่ดีเสมอในการใช้งานโปรแกรมเช่นนี้เป็น superuser ดีกว่าที่จะแก้ไขการอนุญาตของโฟลเดอร์
Jason

2

หากคุณอยู่บนWindowsและคุณกำลังพยายามติดตั้ง MongoDB ให้เรียกใช้ cmd ในฐานะผู้ดูแลระบบเป็นวิธีที่จะไปข้างหน้าตามที่Enriqueแนะนำไว้ข้างต้นดูได้ที่นี่


-1

สิ่งนี้ใช้ได้กับฉันใน Ubuntu LTS 20.04:

$ sudo service mongod start

1
โปรดอธิบายว่าทำไมคุณคิดว่ามันจะใช้ได้กับคนอื่นด้วย!
sauhardnc

1
โปรดอธิบายความละเอียดโดยละเอียดยิ่งขึ้นด้วยข้อมูลเชิงลึกที่มากขึ้นเช่นการอธิบายถึงเหตุผลที่แท้จริงเพิ่มข้อมูลโค้ดการทำงานและขั้นตอนในการกำจัดปัญหา สำหรับรายละเอียดเพิ่มเติมเยี่ยมชมหลักเกณฑ์ของ StackOverflow
Kapil Raghuwanshi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.