MongoDB ไม่พบไดเรกทอรีข้อมูลหลังจากอัปเกรดเป็น Mac OS 10.15 (Catalina)


61

ฉันอัปเดตเป็น MacOS 10.15 (Catalina) วันนี้ เมื่อฉันรันmongodในเทอร์มินัลจะไม่พบ/data/dbไดเรกทอรี:

  /Users/william > mongod
2019-10-08T17:02:44.183+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] MongoDB starting : pid=43162 port=27017 dbpath=/data/db 64-bit host=Williams-MacBook-Pro-6.local
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] db version v4.0.3
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] git version: 7ea530946fa7880364d88c8d8b6026bbc9ffa48c
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] allocator: system
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] modules: none
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] build environment:
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     distarch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] options: {}
2019-10-08T17:02:44.211+0800 I STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] removing socket file: /tmp/mongodb-27017.sock
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] now exiting
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] shutting down with code:100
  /Users/william > 

ฉันพยายามติดตั้ง MongoDB ด้วยbrew:

brew install mongodb

  /Users/william > brew install mongodb
Updating Homebrew...
Error: mongodb: unknown version :mountain_lion

ความช่วยเหลือใด ๆ

คำตอบ:


91

นี่เป็นข้อผิดพลาดหลัก:

ข้อยกเว้นใน initAndListen: NonExistentPath: ไม่พบไดเรกทอรีข้อมูล / data / db, กำลังยกเลิก

Catalina มีการเปลี่ยนแปลงที่น่าประหลาดใจ: มันจะไม่อนุญาตให้มีการเปลี่ยนแปลงในไดเรกทอรีราก (ซึ่งถูกกล่าวถึงในกระทู้ในฟอรัมด้วย):

% sudo mkdir -p /data/db
mkdir: /data/db: Read-only file system

น่าเสียดายที่สิ่งนี้ไม่ได้ถูกสะกดออกมาอย่างชัดเจนในบันทึกประจำรุ่นของCatalinaของ Apple นอกเหนือจากการกล่าวถึงสั้น ๆ ในคุณสมบัติของ Catalina :

macOS Catalina ทำงานในไดรฟ์ข้อมูลระบบแบบอ่านอย่างเดียว

เนื่องจากไดเรกทอรี/data/dbจะถูกเข้ารหัสเป็นค่าเริ่มต้นของ MongoDB การแก้ปัญหาคือการระบุความแตกต่างdbpathที่ไม่ได้อยู่ในไดเรกทอรีราก ตัวอย่างเช่น:

mongod --dbpath ~/data/db

สิ่งนี้จะวางข้อมูลของ MongoDB ไว้ในไดเรกทอรีหลัก ตรวจสอบให้แน่ใจว่าเส้นทาง~/data/dbนั้นมีอยู่จริง

วิธีการทางเลือก

วิธีอื่นคือทำตามคำแนะนำที่Install MongoDB Community Edition บน macOSโดยใช้ประโยชน์brew:

brew tap mongodb/brew
brew install mongodb-community

วิธีนี้จะสร้างไฟล์เพิ่มเติมตามค่าเริ่มต้น:

  • ไฟล์การกำหนดค่า (/usr/local/etc/mongod.conf)
  • เส้นทางไดเรกทอรีบันทึก (/ usr / local / var / log / mongodb)
  • เส้นทางไดเรกทอรีข้อมูล (/ usr / local / var / mongodb)

หากต้องการเรียกใช้mongodคุณสามารถ:

  • รันคำสั่งด้วยตนเองจากบรรทัดคำสั่ง (ซึ่งสามารถใช้นามแฝงเพื่อความสะดวก):

    mongod --config /usr/local/etc/mongod.conf
  • เรียกใช้ MongoDB brew servicesเป็นบริการที่ใช้ โปรดทราบว่าสิ่งนี้จะเรียกใช้ MongoDB เป็นโหนดแบบสแตนด์อโลน (ไม่ใช่ชุดแบบจำลอง) ดังนั้นคุณลักษณะที่ขึ้นอยู่กับ oplog เช่น changestreams จะไม่ทำงานจนกว่าคุณจะแก้ไขmongodไฟล์กำหนดค่า:

    brew services start mongodb-community

ขอบคุณสำหรับคำตอบวิธีใด ๆ ในการกำหนดค่า dbpath ใน bash_profile ดังนั้นไม่จำเป็นต้องเรียกใช้ mongod พร้อมกับพา ธ db ทุกครั้ง
Madhavan Sundararaj

ฉันเดาว่าหลังจากอัพเดท OS ลบโฟลเดอร์ / data / db ซึ่งอยู่ภายใต้ mongodb
Madhavan Sundararaj

1
@MadhavanSundararaj ถ้าคุณต้องการที่จะทำงานmongodb --dbpath ...โดยเพียงแค่พิมพ์mongodในทุบตีคุณสามารถใช้นามแฝงเหมือนและใส่นามแฝงว่าในของคุณalias mongod='mongod --dbpath ...' bashrcมันไม่ใช่ทางออกที่สะอาดที่สุด แต่อาจใช้ได้ผลกับวัตถุประสงค์ของคุณ
kevinadi

ไม่ใช่ macOS รุ่นล่าสุดที่ใช้ zsh ถ้าเป็นเช่นนั้นมันยังคงใช้. bashrc เนื่องจากนามแฝงที่แนะนำข้างต้นใช้งานไม่ได้ตามที่คาดไว้
Madhavan Sundararaj

1
@MadhavanSundararaj สำหรับzshหรือเชลล์อื่น ๆ คุณต้องใส่นามแฝงภายใต้ไฟล์ rc ของเชลล์นั้น สำหรับมันzsh ~/.zshrcตรวจสอบให้แน่ใจว่าคุณได้ติดตามไวยากรณ์ของเชลล์ในการสร้างสมนามด้วยเช่นกัน
kevinadi

61

หลังจากติดตั้ง Catalina Relocated Itemsคุณอาจมีโฟลเดอร์บนเดสก์ทอปของคุณเรียกว่า คุณสามารถค้นหาdata/dbโฟลเดอร์ภายในSecurityโฟลเดอร์

สิ่งที่ฉันต้องทำก็แค่เลื่อนไปข้างSecurity/data/dbหน้าโดยเฉพาะdata/dbแล้ววางไว้ในโฟลเดอร์บ้านของฉัน

คุณสามารถทำได้ด้วยแอพ Finder หรือกับเทอร์มินัลโดยเรียกใช้คำสั่งต่อไปนี้:

sudo mv /Users/Shared/Relocated\ Items/Security/data ~/

หลังจากรันแล้ว: mongod --dbpath ~/data/db

มันขึ้นอยู่กับคุณที่จะสร้างนามแฝงก่อนหน้านี้


6
ฉันเกือบจะเสียสติไปแล้วว่าการอัพเกรด Catalina อาจลบข้อมูลทั้งหมดของฉันได้ ขอบคุณที่ช่วยฉันจากความบ้า!
Adam Bubela

1
ขอบคุณ @MarnixHarderwijk มันใช้งานได้สำหรับฉัน
Zeeyed

2
ขอบคุณมากครับคุณบันทึกไว้วันของฉันทำงานบน MacOS Catalina
AFR

เมื่อฉันเรียกใช้คำสั่ง mongod ฉันได้รับ: "mongod" ไม่สามารถเปิดได้เนื่องจากนักพัฒนาไม่สามารถตรวจสอบได้
Raz

@Raz: ฉันคิดว่านี่เกี่ยวข้องกับapple.stackexchange.com/questions/362883/…
Marnix Harderwijk

7

เควินดีได้ทำสิ่งที่ยุติธรรมสำหรับคำถามแล้วอย่างไรก็ตามนี่คือวิธีที่ฉันดำเนินการแก้ไขปัญหา:

หลังจากติดตั้ง mongodb-community

  1. sudo mkdir -p /System/Volumes/Data/data/db (สร้างโฟลเดอร์ data / db)
  2. sudo chown -Rid -un /System/Volumes/Data/data/db(ให้สิทธิ์)
  3. mongod --dbpath=/System/Volumes/Data/data/db (เปลี่ยน dbpath ของ mongodb)
  4. mongod (วิ่งได้ดี)

ฉันพบบทความเกี่ยวกับการติดตั้ง mongodb มีประโยชน์มาก


สิ่งนี้ช่วยหลังจาก 1 วันของการพยายามแก้ไขปัญหา! บทความไม่ได้กล่าวถึงการเปลี่ยน dbpath และนั่นคือสิ่งที่ฉันหายไป
mhlavacka

1

พบเคล็ดลับ ... ลบโฟลเดอร์ ~ / data / db ทั้งหมดจากไดเรกทอรีจากนั้นสร้างขึ้นใหม่ แต่อย่าใช้ mkdir -p / data / db แทนเพียงแค่ใช้ trackpad ของคุณเพื่อ ใช้วิธีสร้างระบบในการสร้างโฟลเดอร์

สิ่งนี้ใช้ได้สำหรับฉัน


มันใช้งานไม่ได้ :-(
โม.

1

นี่คือสิ่งที่ทำงานสำหรับฉัน:

  1. สร้างโฟลเดอร์ที่อื่นเช่น Development / mongodb / data / db
  2. เปิดไฟล์mongod.confและอัพเดตค่าstorage.dbPathเป็นพา ธ โฟลเดอร์ที่สร้างขึ้นใหม่

1
ไฟล์ mongod.conf อยู่ที่ไหน
ValRob

2
เป็นไฟล์เริ่มต้น ไปที่ลิงค์นี้: docs.mongodb.com/manual/reference/configuration-options จากนั้นไปที่ "File Configuration"
rolu


0

เวอร์ชั่น Mac Catalina ทำให้โฟลเดอร์รากไม่สามารถเขียนได้อีกต่อไป

Brew มี mongodb รุ่นปรับปรุงเพื่อใช้เส้นทางใหม่ (ซึ่งสร้างเอง) /usr/local/var/mongodbและการทำตามคำแนะนำเหล่านี้จะแก้ไขปัญหา:

คำแนะนำในการติดตั้ง mongodb-community-edition ที่อัพเดต

brew install mongodb-community@VERSION โดย VERSION แรกที่มีการแก้ไขคือ 4.2


คำสั่งดังกล่าวควรดำเนินการด้วย sudo จากนั้นกำหนดค่า dbPath จะได้รับการเคารพ มิฉะนั้น mongo ยังคงค่าเริ่มต้นที่จะ/data/dbคำนึงถึงการกำหนดค่า
Matt Hagemann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.