Mongod mengeluh bahwa tidak ada folder / data / db

475

Saya menggunakan mac baru saya untuk pertama kalinya hari ini. Saya mengikuti panduan memulai di mongodb.org hingga langkah di mana kita membuat direktori / data / db. btw, saya menggunakan rute homebrew.

Jadi saya membuka terminal, dan saya pikir saya pada apa yang Anda sebut Home Directory, karena ketika saya melakukan "ls", saya melihat folder Aplikasi Desktop Film Musik Gambar Dokumen dan Perpustakaan.

Jadi saya melakukan

mkdir -p /data/db

pertama, katanya izin ditolak. Saya terus mencoba berbagai hal selama setengah jam dan akhirnya:

mkdir -p data/db

bekerja. dan ketika saya "ls", direktori data dan bersarang di dalamnya folder db memang ada.

kemudian saya jalankan mongod dan mengeluh tentang tidak menemukan data / db

Apakah saya melakukan sesuatu yang salah?

Sekarang saya sudah melakukan

sudo mkdir -p /data/db

dan ketika saya melakukan "ls" saya memang melihat data dir dan dir db. di dalam dir db, sama sekali tidak ada di dalamnya dan ketika sekarang saya menjalankan mongod

Sun Oct 30 19:35:19 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Sun Oct 30 19:35:19 dbexit: 
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to flush diaglog...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 30 19:35:19 [initandlisten] shutdown: lock for final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: closing all files...
Sun Oct 30 19:35:19 [initandlisten] closeAllFiles() finished
Sun Oct 30 19:35:19 [initandlisten] shutdown: removing fs lock...
Sun Oct 30 19:35:19 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Sun Oct 30 19:35:19 dbexit: really exiting now

EDIT Mendapatkan pesan kesalahan untuk

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

Terimakasih semuanya!

Nik Jadi
sumber
1
"Argumen tidak valid" berarti bahwa nama simbolis untuk pengguna mongo berbeda pada sistem Anda - Anda mungkin menggunakan paket berbeda atau menginstal mekanisme untuk menginstal MongoDB. Anda harus memeriksa file / etc / passwd dan / etc / group Anda untuk nama simbolis (atau uid / gid) dari pengguna mongo grep mongo /etc/passwd /etc/group. Jika itu tidak berhasil, periksa namanya dengan memeriksa pemilik direktori ls -ld /var/lib/mongo. Atau untuk melihat uid / gid melakukan ini: ls -lnd /var/lib/mongo. Dalam kasus saya drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ...- ini berarti menggunakan 487: 480 sebagai param
Tilo
menggunakan UID / GID identik dengan menggunakan nama simbolik. mis. ganti saja 'mongod: mongod dengan nomor uid / gid yang Anda temukan dengan metode di atas ..
Tilo
Sekarang kita tahu bagaimana cara menambahkan direktori ini dengan benar (data / db), mengapa direktori ini tidak dimasukkan dalam instalasi?
winux
Jika Anda baru saja memutakhirkan ke MacOS 10.15, jawaban ini mungkin membantu: stackoverflow.com/questions/58283257/…
Adam Zerner
jika Anda memiliki versi terakhir MAC: Dengan pembaruan macOS Catalina baru, folder "/ data / db" menjadi read-only, Anda tidak dapat memodifikasinya. Ikuti prosedur ini untuk membuat DB di folder lain: 1) Ubah direktori mongod: sudo mongod --dbpath / System / Volume / Data / data / db 2) Berikan alias: alias mongod = "sudo mongod --dbpath / System / Volume / Data / data / db "
Farbod Aprin

Jawaban:

636

Anda membuat direktori di tempat yang salah

/ data / db berarti secara langsung di bawah direktori root '/', sedangkan Anda membuat 'data / db' (tanpa awalan /) mungkin hanya di dalam direktori lain, seperti direktori home '/ root'.

Anda perlu membuat direktori ini sebagai root

Anda harus menggunakan sudo, misalnyasudo mkdir -p /data/db

Atau yang perlu Anda lakukan su -untuk menjadi superuser, lalu buat direktori denganmkdir -p /data/db


catatan:

MongoDB juga memiliki opsi di mana Anda dapat membuat direktori data di lokasi lain, tetapi itu umumnya bukan ide yang baik, karena itu hanya sedikit mempersulit hal-hal seperti pemulihan DB, karena Anda selalu harus menentukan jalur db secara manual. Saya tidak akan merekomendasikan melakukan itu.


Edit:

pesan kesalahan yang Anda dapatkan adalah "Tidak dapat membuat / membuka file kunci: /data/db/mongod.lock errno: 13 Izin ditolak" . Direktori yang Anda buat tampaknya tidak memiliki izin dan kepemilikan yang benar - itu harus dapat ditulis oleh pengguna yang menjalankan proses MongoDB.

Untuk melihat izin dan kepemilikan direktori '/ data / db /', lakukan ini: (seperti inilah tampilan perizinan dan kepemilikan)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/

Sisi kiri 'drwxr-xr-x' menunjukkan izin untuk Pengguna, Grup, dan Lainnya. 'mongod mongod' menunjukkan siapa yang memiliki direktori, dan grup yang termasuk dalam direktori tersebut. Keduanya disebut 'mongod' dalam hal ini.

Jika direktori '/ data / db' Anda tidak memiliki izin dan kepemilikan di atas, lakukan ini :

Pertama, periksa apa yang dimiliki pengguna dan grup yang dimiliki oleh pengguna mongo Anda:

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false

Anda harus memiliki entri untuk mongod di / etc / passwd, karena ini adalah daemon.

sudo chmod 0755 /data/db
sudo chown -R 498:496 /data/db    # using the user-id , group-id

Anda juga dapat menggunakan nama pengguna dan nama grup, sebagai berikut: (mereka dapat ditemukan di / etc / passwd dan / etc / group)

sudo chown -R mongod:mongod /data/db 

yang seharusnya membuatnya bekerja ..

Dalam komentar di bawah, beberapa orang menggunakan ini:

sudo chown -R `id -u` /data/db
sudo chmod -R go+w /data/db

atau

sudo chown -R $USER /data/db 
sudo chmod -R go+w /data/db

Kerugiannya adalah $ USER adalah akun yang memiliki shell login. Daemon idealnya tidak memiliki shell untuk alasan keamanan, itu sebabnya Anda melihat / bin / false dalam grep file password di atas.

Periksa di sini untuk lebih memahami arti izin direktori:

http://www.perlfect.com/articles/chmod.shtml

Mungkin juga lihat salah satu tutorial yang dapat Anda temukan melalui Google: "UNIX untuk pemula"

Tilo
sumber
2
coba lakukan ls -ld /data/ dan ls -ld /data/db/.. Anda akan melihat izin direktori yang tercantum di sebelah kiri, kemudian kepemilikan, lalu nama direktori. Anda harus memastikan bahwa direktori dapat ditulis oleh user-id yang menjalankan MongoDB.
2
@Ilo Ya saya sudah melakukannya. Yang pertama, chmod berjalan ok, yang kedua mengatakan "chown: mongod: Argumen tidak valid"
Nik So
3
Ini seluruh utas persis apa yang saya alami. Tapi saya juga sepertinya tidak mengerti apa itu user-id dan group-id dari mongo di sistem saya atau menemukan dokumentasi di mana saja. Aku terjebak di chong mongod: mongod part sebagai kembali daninvalid arguement
Perjalanan
10
Pembaruan saya pergi dengan sudo touch /data/db/mongod.lockdan sudo chmod 0777 /data/db/mongd.lock. Dia mulai dari awal.
Perjalanan
141
Berlari sudo chown -R `id -u` /data/dbatau sudo chown -R $USER /data/dbbukannya sudo chown mongod:mongod /data/dbmelakukan trik untuk saya
heitortsergent
117

Setelah mendapatkan kesalahan yang sama dengan Nik

chown: id -u: Argumen tidak valid

Saya menemukan ini tampaknya terjadi dari penggunaan jenis tanda kutip yang salah (seharusnya backquotes ) Forum Ubuntu

Sebaliknya saya hanya menggunakan

sudo chown $ USER / data / db

sebagai alternatif dan sekarang mongod memiliki izin yang dibutuhkannya.

Jagough
sumber
4
Jika seseorang menemukan itu berguna: Saya memiliki masalah yang sama, tetapi pesan kesalahannya agak berbeda (mengatakan bahwa grup 'mongod' tidak ada ketika saya mencoba chown mongod: mongod) -> namun, menggunakan chown $ USER bekerja untuk saya, terima kasih ...
trainoasis
6
Saya harus menambahkan -R untuk ini. "sudo chown -R $ USER / data / db"
Kevin
1
Jawaban sempurna untuk pemula,
Pyae Sone
90

Ini berfungsi untuk saya, ditemukan dalam komentar:

sudo chown -R $USER /data/db
Iman Mohamadi
sumber
2
Juga untuk saya. Menginstal mongo melalui homebrew di OSX saya tidak menambah pengguna dan grup mongod.
Zauker
73

Buat folder.

sudo mkdir -p /data/db/

Beri diri Anda izin ke folder itu.

sudo chown `id -u` /data/db

Maka Anda dapat berlari mongodtanpa sudo. Bekerja pada OSX Yosemite

Connor Leech
sumber
1
Alih-alih membuat direktori baru coba restart layanan mongod. Misalnya: - service mongod restart
Devendra Bhat
bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
bibscy
32

Untuk memperbaiki kesalahan itu pada OS X, saya memulai kembali dan menghentikan layanan: $ brew services restart mongodb $ brew services stop mongodb

Lalu saya berlari mongod --config /usr/local/etc/mongod.conf, dan masalahnya hilang.

Kesalahan tampaknya muncul setelah memutakhirkan paket homebrew mongodb.

orluke
sumber
23

Menginstal melalui brew di Mac tempat YOUR_USER_NAME dan staf adalah grup

sudo mkdir -p /data/db
sudo chmod +x+r+w /data/db/
sudo touch /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db
sudo chmod +x+r+w /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db/mongod.lock
Gal Bracha
sumber
@MarkusWMahlberg Terima kasih untuk itu. itu salah satu hal yang terasa aneh tetapi berhasil. jadi siapa yang harus menjadi pemilik dan grup file itu?
Gal Bracha
Itu tergantung pada distribusi Anda. Lihat /etc/passwduntuk nama pengguna - grup ini kemungkinan identik. Biasanya salah satu mongoatau mongodb.
Markus W Mahlberg
@ MarkusWMahlberg ok - saya memperbaikinya sekarang - ketika menginstal melalui buatan itu tidak membuat pengguna dan grup jadi saya hanya mengaturnya ke nama pengguna saya sendiri. lihat apakah sekarang lebih aman. terima kasih
Gal Bracha
Terima kasih. Saat mengembangkan pada mac dengan minuman, ini memperbaiki masalah. Tidak perlu keamanan lebih jika Anda hanya menggunakan data uji di mongodb. @MarkusWMahlberg pada OS X, pengguna yang menjalankan mongod adalah YOUR_USER_NAME jika Anda memulainya dengan "mongod &".
gaspard
22

Jika Anda menjalankan mongo tanpa argumen, diasumsikan Anda menjalankan mesin produksi sehingga menggunakan lokasi default.

untuk menggunakan database Anda sendiri (dev atau hanya yang berbeda):

./bin/mongod --dbpath ~/data/db
loreii
sumber
Apakah ini menjelaskan mengapa ia tidak menggunakan pengaturan yang dideklarasikan di /etc/mongod.conf? Punya masalah dengan instalasi 3.6.5 di ubuntu 16.04.
Dark Star1
cobalah untuk memulai dalam mode verbose (-v) atau paksa paksa konfigurasi (--config): docs.mongodb.com/manual/reference/program/mongod Jika Anda menginstal menggunakan apt-get, mulailah dengan layanan status mongod / mulai / stop
loreii
Saya memang melihat ke dalam log mongo. Semua itu terus mengatakan bahwa kurangnya direktori / data / db mencegah startup. Akhirnya menemukan jawaban Anda dan itu tampaknya menjadi alasan untuk masalah ini?
Dark Star1
Ini juga berfungsi ketika menggunakan MongoDB di Linux-Subsystem pada Windows, di mana tidak mungkin untuk benar-benar membuat / data / db di root fs.
hiergiltdiestfu
8

Saya punya masalah dengan pengaturan Mongodb yang ada. Saya masih tidak yakin mengapa itu terjadi, tetapi untuk beberapa alasan proses Mongod tidak dapat menemukan file mongod.config. Karena tidak dapat menemukan file konfigurasi, ia mencoba mencari file DB di / data / db, folder yang tidak ada. Namun, file konfigurasi masih tersedia sehingga saya memastikan proses memiliki izin ke file konfigurasi dan menjalankan proses mongod dengan flag --config sebagai berikut:

mongod --config /etc/mongod.conf

Dalam file konfigurasi itu sendiri saya memiliki pengaturan ini:

storage:
  dbPath: /var/lib/mongodb

Dan ini adalah bagaimana prosesnya dapat menemukan folder DB nyata lagi.

Tal Delbari
sumber
1
Saya mengkonfirmasi itu terjadi pada saya. Alih-alih file config, kita bisa mengatur --dbpath = / var / lib / mongodb. Saya pikir saya telah kehilangan semua data saya tetapi masih ada.
lenhhoxung
8

aku melakukannya

brew install mongodb

pada 2018-02-01 dan itu memberi saya mongodbversi 3.6.2.

Diminta oleh jawaban dari orluke di atas, saya mencoba saja

$ brew services restart mongodb

dan semuanya muncul dalam kehidupan. mongoose.createConnection()Panggilan saya melakukan apa yang saya inginkan. The GUI MongoDB Kompas , versi masyarakat, akan terhubung. Saya menggunakan Kompas untuk melihat local.startup_logkoleksi. Itu memiliki satu dokumen, log saya baru saja memulai layanan mongoDB, dan itu

cmdLine:Object
    config:"/usr/local/etc/mongod.conf"

dan memang ada file seperti itu:

$ more /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

dan ada /usr/local/var/mongodbdirektori dengan banyak file yang tidak jelas. Jadi sepertinya itu cara kerjanya sekarang.

Saya tidak yakin apakah brew services restartmengatur layanan untuk berjalan saat login. Jadi saya lakukan

brew services stop mongodb
brew services start mongodb

dan berharap itu mulai lagi setelah reboot. Dan memang benar. Bahkan, sekarang, saya pikir hal yang benar untuk dilakukan setelah instalasi awal adalah

brew services start mongodb

dan itu akan memulai layanan dan restart setelah reboot.

emrys57
sumber
7

Perintah Anda akan membuat struktur direktori di folder saat ini, bukan direktori root komputer Anda (yang merupakan apa yang hilang /).

Perintah pertama benar, tetapi karena Anda mencoba membuat folder /, yang merupakan direktori terproteksi, Anda harus membuatnya dengan awalan sudo, yang merupakan kependekan dari "superuser do". Anda kemudian akan diminta kata sandi.

Jadi perintah lengkapnya adalah:

$ sudo mkdir -p /data/db
Russell
sumber
6

Anda perlu membuat / data / db ... itu adalah direktori bernama / data / di root Anda (yaitu / ) dan subfolder di sana disebut / db / ...

Anda mendapatkan kesalahan izin karena Anda perlu menggunakan sudo untuk membuat direcotry di dir root di MacOS, sudo memungkinkan Anda menjalankan perintah sebagai administrator.

Jadi, jalankan ini sebagai gantinya ...

$ sudo mkdir -p /data/db

Ini akan meminta Anda untuk kata sandi, kata sandi yang sama yang Anda gunakan untuk mengubah pengaturan sistem (dialog kecil yang terbuka ketika Anda mencoba dan mengubah hal-hal dalam Preferensi Sistem untuk ecample), dan kemungkinan sama dengan yang Anda gunakan untuk masuk.

Justin Jenkins
sumber
6

Anda mencoba membuat direktori yang tidak memiliki akses root.

Untuk menguji mongodb, saya hanya menggunakan direktori dari direktori pengguna saya seperti:

cd
mkdir -p temp/
mongod --dbpath .

Ini akan membuat database mongo di temp / dari direktori kerja Anda saat ini

EhevuTov
sumber
6

Saya mengatasi masalah yang sama persis dengan membuat folder / data / db dengan window manager saya. Saya mencoba melakukannya melalui terminal pada awalnya, dan untuk membuat folder di direktori root, saya harus menggunakan sudo.

Saya baru saja pergi ke direktori root menggunakan Finder dan membuat folder baru menggunakan 'Folder Baru'. Benar-benar bekerja untuk saya.

Catatan: Saya menggunakan OSX.

Jupo
sumber
5

Hanya catatan singkat:

Jika Anda mencoba menjalankan mongod tanpa mengubah izin terlebih dahulu, Anda mungkin akan memiliki file mongod.lock (dan beberapa file lainnya) di direktori / data / db. Bahkan setelah Anda mengubah izin untuk direktori / data / db untuk memberikan akses ke $ USER Anda, Anda akan terus mendapatkan "Tidak dapat membuat / membuka file kunci: /data/db/mongod.lock errno: 13 Izin ditolak "kesalahan. Jalankan ls -al / data / db dan Anda mungkin akan melihat bahwa izin untuk masing-masing file masih disetel ke root untuk pengguna, bukan ke $ USER Anda. Anda harus menghapus file mongod.lock, dan yang lainnya juga. Kemudian ketika Anda menjalankan mongod lagi, semuanya akan berfungsi, dan Anda dapat memverifikasi bahwa izin file cocok dengan izin direktori dengan menjalankan ls -al lagi.

whiny_nil
sumber
ini catatan yang bagus. Saya tidak memiliki file kunci, tetapi saya perlu mengubah pemilik data dan folder db saya.
Caranicas
5

Buat direktori di Root

sudo mkdir -p /data/db

Sekarang ganti Pemilik

sudo chown -R $USER /data

Kamu baik untuk pergi!

mongod

alih-alih menggunakan sudo mongod, Anda tidak perlu memasukkan kata sandi setiap kali, tetapi untuk proyek sebenarnya yang harus Anda gunakan sudo mongod, jangan berikan izin kepada pengguna normal!

BloodyLogic
sumber
4

Saya terus mendapatkan kesalahan berikut ketika saya mencoba memulai mongodb.

"shutting down with code:100" 

Saya menggunakan perintah berikut:

./mongod --dbpath=~/mongo-data

Perbaikan untuk saya adalah bahwa saya tidak memerlukan tanda "=" dan ini menyebabkan kesalahan. Jadi saya lakukan

./mongod --dbpath ~/mongo-data

Hanya ingin membuang ini di luar sana karena kesalahan sama sekali tidak menentukan bahwa ini adalah masalahnya. Saya hampir menghapus isi direktori ~ / mongo-data untuk melihat apakah itu membantu. Senang saya ingat bahwa cli args terkadang tidak menggunakan tanda "=".

Cloudish123
sumber
3

Sampai tanggal ini saya juga berpikir bahwa kita perlu membuat folder / data / db untuk memulai perintah mongod.

Tetapi baru-baru ini saya mencoba memulai mongod dengan perintah layanan dan itu berhasil untuk saya dan tidak perlu membuat direktori / data / db.

service mongod start

Untuk memeriksa status mongod, Anda dapat menjalankan perintah berikut.

service mongod status
Devendra Bhat
sumber
3

Solusi ini memecahkan masalah saya

  1. Jadikan direktori sebagai

    sudo mkdir -p / data / db

  2. Itu akan membuat direktori bernama db dan daripada mencoba memulai dengan perintah

    sudo mongod

Jika Anda mendapatkan kesalahan atau masalah lain dengan memulai mongod, Anda mungkin menemukan masalah sebagai

Gagal mengatur pendengar: SocketException: Alamat sudah digunakan Jika Anda menemukan kesalahan lain selain Anda harus mematikan proses menjalankan mongod dengan mengetik ke terminal sebagai

ps ax | grep mongod
sudo kill ps_number

dan temukan mongod menjalankan port dan matikan prosesnya. Cara lain adalah dengan membuat port spesifik ketika memulai mongod sebagai

sudo mongod --port 27018
Mehedi Abdullah
sumber
2

Ketik "id" pada terminal untuk melihat id pengguna yang tersedia yang dapat Anda berikan, Kemudian cukup ketik

"sudo chown -R idname / data / db"

Ini berhasil bagi saya! Semoga ini bisa menyelesaikan masalah Anda.

Prakhar Agrawal
sumber
2

Dalam versi MongoDB yang lebih mutakhir, saya memiliki 3.2.10, disimpan sebagai default

/var/lib/mongodb

illcrx
sumber
1
berlari mongod --dbpath /var/lib/mongodbmembantu dalam situasi seperti ini
santiago arizti
1

Setelah (kembali) menginstal paket alat, saya mendapat kesalahan serupa pada perangkat Windows 10;

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

Solusi Analog seperti yang dijelaskan untuk sistem linux: cukup membuat folder sudah cukup untuk dapat memulai mongod.exe(server mongoDB).

Kupikir aku mungkin meninggalkannya untuk orang-orang yang berakhir di sini dengan istilah pencarian yang sama pada perangkat Windows.

di
sumber
1

Saya hanya ingin menunjukkan di sini bahwa jika Anda mencoba ini dan Anda mengalami mkdir: /data/db: Read-only file system, silakan lihat komentar ini, yang membantu saya: https://stackoverflow.com/a/58895373 .

Dengan begitu jika ada yang ada di jawaban ini dan melakukan Kontrol F untuk "hanya membaca" mereka akan melihat ini

blubberbo
sumber
0

Ada cara yang sangat bodoh untuk menciptakan masalah ini, yang telah saya rintis:

1) biarkan mongo Anda instal untuk sementara waktu 2) kembali dan server tidak berjalan 3) cobalah untuk memulainya, tetapi jangan gunakan sudo kali ini 4) mongo tidak dapat menemukan data / db / karena sekarang sedang mencari di dir home user, bukan su home dir

Ya, itu benar-benar bodoh tetapi jika sudah lama sejak Anda berada di sistem itu bisa membuat Anda tersandung.

Jawaban singkat: pastikan Anda menjalankan mongo dengan direktori home tersirat yang sama

mtyson
sumber