MongoDB tidak dapat menemukan direktori data setelah memutakhirkan ke Mac OS 10.15 (Catalina)

61

Saya memperbarui ke MacOS 10.15 (Catalina) hari ini. Ketika saya berjalan mongoddi terminal itu tidak dapat menemukan /data/dbdirektori:

  /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 > 

Saya mencoba menginstal MongoDB dengan brew:

brew install mongodb

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

Ada bantuan?

William Hu
sumber

Jawaban:

91

Ini adalah kesalahan utama:

pengecualian di initAndListen: NonExistentPath: Direktori data / data / db tidak ditemukan., terminating

Catalina memiliki perubahan mengejutkan: itu tidak akan mengizinkan perubahan ke direktori root (ini juga dibahas di utas forum ):

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

Sayangnya, ini tidak dijabarkan secara eksplisit dalam catatan rilis Catalina Apple , selain penyebutan singkat dalam fitur Catalina :

macOS Catalina berjalan dalam volume sistem khusus yang hanya baca

Karena direktori /data/dbdikodekan sebagai MongoDB default, solusinya adalah menentukan yang berbeda dbpathyang tidak terletak di direktori root. Sebagai contoh:

mongod --dbpath ~/data/db

Ini akan menempatkan data MongoDB di direktori home Anda. Pastikan saja jalurnya ~/data/dbbenar-benar ada.

Metode alternatif

Metode alternatif adalah mengikuti petunjuk di Install MongoDB Community Edition di macOS dengan memanfaatkan brew:

brew tap mongodb/brew
brew install mongodb-community

Ini akan membuat beberapa file tambahan secara default:

  • file konfigurasi (/usr/local/etc/mongod.conf)
  • jalur direktori log (/ usr / local / var / log / mongodb)
  • jalur direktori data (/ usr / local / var / mongodb)

Untuk menjalankan mongodAnda dapat:

  • Jalankan perintah secara manual dari baris perintah (ini dapat disingkat untuk kenyamanan):

    mongod --config /usr/local/etc/mongod.conf
  • Jalankan MongoDB sebagai layanan menggunakan brew services. Perhatikan bahwa ini akan menjalankan MongoDB sebagai node mandiri (bukan set replika), sehingga fitur yang tergantung pada oplog misalnya changestreams tidak akan berfungsi kecuali jika Anda memodifikasi mongodfile konfigurasi:

    brew services start mongodb-community
kevinadi
sumber
Terima kasih atas jawabannya, ada metode untuk mengkonfigurasi dbpath di bash_profile? sehingga, tidak perlu menjalankan mongod dengan jalur db setiap saat.
Madhavan Sundararaj
Saya kira, setelah pembaruan, OS menghapus / data / folder db yang hadir di bawah mongodb
Madhavan Sundararaj
1
@MadhavanSundararaj jika Anda ingin menjalankan mongodb --dbpath ...hanya dengan mengetikkan mongodbash, Anda dapat menggunakan alias seperti alias mongod='mongod --dbpath ...'dan memasukkan alias itu ke dalam bashrc. Ini bukan solusi terbersih tetapi mungkin berhasil untuk tujuan Anda.
kevinadi
bukankah macOS terbaru menggunakan zsh? jika demikian, apakah masih menggunakan .bashrc. Karena yang disarankan di atas alias tidak berfungsi seperti yang diharapkan
Madhavan Sundararaj
1
@MadhavanSundararaj untuk zshatau shell lain, Anda harus meletakkan alias di bawah file rc shell itu. Untuk zshitu ~/.zshrc. Pastikan Anda juga mengikuti sintaks shell untuk membuat alias juga.
kevinadi
61

Setelah menginstal Catalina, Anda mungkin memiliki folder di Desktop yang disebut Relocated Items. Anda dapat menemukan data/dbfolder di dalam Securityfolder tersebut.

Yang harus saya lakukan adalah memindahkan Security/data/db, khususnya data/dbdan meletakkannya di dalam folder rumah saya.

Anda dapat melakukan ini dengan aplikasi Finder atau dengan terminal dengan menjalankan perintah berikut:

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

Setelah menjalankan itu: mongod --dbpath ~/data/db

Terserah Anda untuk membuat alias sebelumnya

Marnix Harderwijk
sumber
6
Saya hampir menjadi gila karena peningkatan Catalina bisa menghapus semua data saya. Terima kasih telah menyelamatkan saya dari kegilaan!
Adam Bubela
1
Terima kasih @MarnixHarderwijk, ini bekerja untuk saya.
Zeeyed
2
Terima kasih banyak Anda telah menyelamatkan hari saya, bekerja di MacOS Catalina
afr
Ketika saya menjalankan perintah mongod saya mendapatkan: "mongod" tidak dapat dibuka karena pengembang tidak dapat diverifikasi.
Raz
@Raz: Saya pikir ini terkait apple.stackexchange.com/questions/362883/...
Marnix Harderwijk
7

Kevinadi sudah melakukan keadilan untuk pertanyaan itu, namun inilah cara saya menyelesaikan masalah:

Setelah menginstal komunitas mongodb

  1. sudo mkdir -p /System/Volumes/Data/data/db (Buat folder data / db)
  2. sudo chown -Rid -un /System/Volumes/Data/data/db(Berikan izin)
  3. mongod --dbpath=/System/Volumes/Data/data/db (Ubah dbpath dari mongodb)
  4. mongod (Berjalan baik)

Saya menemukan artikel ini tentang menginstal mongodb sangat berguna

Tolumide
sumber
Ini membantu setelah 1 hari mencoba untuk memperbaiki masalah! Artikel itu tidak menyebutkan perubahan dbpath dan itulah yang saya lewatkan
mhlavacka
1

menemukan trik ... hapus ~ / data / db seluruh folder dari direktori kemudian buat kembali yang baru tetapi JANGAN GUNAKAN mkdir -p / data / db sebagai gantinya, cukup gunakan trackpad Anda untuk melakukannya gunakan cara sistem untuk membuat folder

ini bekerja untuk saya

Tianyu Cao
sumber
Itu tidak bekerja :-(
Mo.
1

Inilah yang bekerja untuk saya:

  1. Buat folder di suatu tempat misalnya Pengembangan / mongodb / data / db
  2. Buka file mongod.conf dan perbarui nilai storage.dbPath ke jalur folder yang baru dibuat
rolu
sumber
1
di mana file mongod.conf ??
ValRob
2
Ini adalah file default. Pergi ke tautan ini: docs.mongodb.com/manual/reference/configuration-options dan kemudian ke "File Konfigurasi"
rolu
0

Versi Mac Catalina membuat folder root tidak lagi dapat ditulis.

Brew memiliki versi mongodb yang diperbarui untuk menggunakan jalur baru (yang dibuat sendiri), /usr/local/var/mongodbdan mengikuti instruksi ini akan memperbaiki masalah:

Panduan untuk menginstal edisi mongodb-komunitas yang diperbarui

brew install mongodb-community@VERSION di mana VERSI pertama dengan perbaikan adalah 4.2

RobKohr
sumber
Perintah di atas harus dijalankan dengan sudo. Kemudian konfigurasi dbPath akan dihormati. Kalau tidak, mongo masih default untuk /data/dbterlepas dari konfigurasi.
Matt Hagemann