MongoDB: pengecualian dalam initAndListen: 20 Mencoba membuat file kunci pada direktori read-only: / data / db, mengakhiri

146

Saya buat /data/dbdi direktori root dan berlari ./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
whinytween96
sumber
4
sepertinya masalah izin. Apakah pengguna yang menjalankan mongod memiliki izin untuk menulis di direktori / data / db? Bagikan hasil ls -ld /data/dbdan idagar kami dapat memberi saran.
Bjorn Roche
drwxr-xr-x 2 root root 4096
whinytween96
uid = 1000 (pengguna) gid = 1000 (pengguna) grup = 1000 (pengguna), 4 (adm), 24 (cdrom), 27 (sudo), 30 (celup), 46 (plugdev), 113 (lpadmin), 128 (lpadmin), 128 (sambashare)
whinytween96
@BjornRoche terima kasih untuk -ldbagiannya :)
Skynet
@BjornRoche hasil saya drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbdan saya masih mendapatkan kesalahan. Ada ide?
Blake

Jawaban:

278

Masalahnya adalah direktori yang Anda buat, /data/dbdimiliki dan hanya dapat ditulis oleh pengguna root, tetapi Anda menjalankan mongod seperti diri Anda sendiri. Ada beberapa cara untuk mengatasi ini, tetapi pada akhirnya, Anda harus memberikan direktori yang bersangkutan izin yang tepat. Jika ini untuk produksi, saya akan menyarankan Anda untuk memeriksa dokumen dan memikirkannya dengan seksama - Anda mungkin ingin berhati-hati.

Namun, jika ini hanya untuk pengujian dan Anda hanya perlu ini untuk bekerja dan melanjutkan, Anda bisa mencoba ini, yang akan membuat direktori dapat ditulisi oleh semua orang:

> sudo chmod -R go+w /data/db

atau ini, yang akan membuat direktori milik Anda:

> sudo chown -R $USER /data/db
Bjorn Roche
sumber
4
Saya pikir seseorang mungkin perlu -Rmengubah semua /data/dbfile di dalamnya secara rekursif.
YongHao Hu
2
Terima kasih untuk ini. Sudah mencoba dan masih mendapatkan kesalahan yang sama
Samuel Dare
1
Topik ini sudah agak lama, tetapi bagi saya, menggunakan chmodmenghasilkan kesalahan baru initAndListen : operation not permitted, tetapi chownberhasil.
bachinblack
chown juga melakukannya untuk saya
dwagnerkc
Ini adalah praktik buruk untuk memberikan 777 umask ke direktori. Anda dapat mengatur 755 dan berfungsichmod -R 755 /data/db
Juan-Kabbali
60

Di Mac, saya harus melakukan hal berikut:

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

karena ada juga file di /tmpmana Mongo juga membutuhkan akses

Santiago Martí Olbrich
sumber
2
Bekerja di Linux Fedora 28
Samuel Ivan
2
Ini harusnya di atas
Yashwanth Kambala
ini juga melakukannya untuk saya.
Canovice
25

Jika sistem Anda menggunakan SELinux, pastikan Anda menggunakan konteks yang tepat untuk direktori yang Anda buat:

ls -dZ /data/db/
ls -dZ /var/lib/mongo/

dan mengkloning konteks dengan:

chcon -R --reference=/var/lib/mongo /data/db
drrossum
sumber
1
Kamu menyelamatkan hariku! Terima kasih banyak
Keerthivasan
2
ls -dZ / var / lib / mongodb / untuk versi mongo yang lebih baru
espeed
17

Saya mengalami masalah yang sama dan solusi berikut memecahkan masalah ini. Anda harus mencoba solusi berikut.

sudo mkdir -p / data / db
sudo chown -R 'nama pengguna' / data / db

Hamdi Bayhan
sumber
9

masukkan deskripsi gambar di siniPertama-tama hentikan semua layanan mongoDB , lalu buat direktori /, artinya root, jika Anda belum punya, dan hapus juga file port. berikan semua izin ke direktori itu, jadilah pemilik direktori tersebut, jalankan perintah di bawah ini:

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

Sekarang Anda sudah selesai, mulai saja layanan MongoDB, jika tidak membantu, cobalah untuk mengubah port seperti:

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018

Catatan: Bagi saya semua ini berhasil dan berharap akan berhasil untuk Anda, kawan!

Kode
sumber
5

Perbaiki izin /data/db(atau /var/lib/mongodb):

sudo chown -R mongodb: /data/db

kemudian restart MongoDB misalnya menggunakan

sudo systemctl restart mongod

Jika tidak membantu, periksa pesan kesalahan Anda jika Anda menggunakan direktori data yang berbeda dengan / var / lib / mongodb. Dalam hal ini dijalankan

sudo chown -R mongodb: <insert your data directory here>

sumber

plcosta
sumber
4

Solusi yang bagus, tapi saya heran mengapa tidak ada yang memberikan solusi untuk windows.

Jika Anda menggunakan windows, Anda hanya perlu "Jalankan sebagai Administrator" cmd.

Enrique Benito Casado
sumber
6
Saya pikir itu karena orang biasanya tidak menjalankan server basis data pada Windows.
Blake
1
Juga, ide buruk untuk menjalankan database sebagai administrator / root, periksa komentar lain di sini seperti ini untuk lebih jelasnya
Nino Filiu
4

Jika Anda memeriksa log mongodb Anda dan Anda mendapatkan kesalahan seperti itu maka ikuti saja langkah-langkah seperti yang saya lakukan. Itu terjadi karena masalah izin dengan /data/dbdirektori Anda . Saya menggunakan ubuntu16.04 dan saya menemukan solusi dengan menjalankan dua perintah sederhana sebagai berikut.

Langkah 1: Berikan izin ke direktori / data / db:

sudo chmod -R 0777 /data/db

Langkah 2: Cobalah untuk memulai layanan mongod sebagai:

sudo service mongod start

Langkah 3: Periksa status layanan mongod:

sudo service mongod status
Jitendra
sumber
2
Langkah 1 akan memberikan izin baca / tulis / eksekusi untuk semua pengguna. Ini seharusnya tidak digunakan.
Jonas Franz
Terima kasih, @JonasFranz, atas tanggapan Anda, jadi dalam hal ini, kami dapat menggunakan izin 0755 untuk server produksi. Tolong koreksi saya jika saya salah.
Jitendra
3

Jika Anda tidak perlu memiliki direktori basis data di root, Anda dapat membuatnya data/dbdi direktori home Anda ( mkdir -p ~/data/db).

Kemudian Anda dapat memulai server MongoDB dengan --dbpathopsi:

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

(Ini dengan asumsi Anda memulainya dari terminal. Untuk beberapa alasan aneh, mongodtidak menerima ~ sebagai jalur direktori rumah, maka tipuan substitusi bash echo, Anda juga dapat menulis /home/yourusername/data/db)

Padahal, tidak harus begitu ~/data/db , itu bisa di mana saja Anda inginkan dan dengan cara ini Anda dapat memiliki banyak jalur basis data dan mengatur semuanya dengan baik. Mungkin bukan pilihan terbaik untuk produksi (tergantung pada apa yang ingin Anda lakukan), tetapi untuk mengembangkan karya baik-baik saja.

Kresimir
sumber
3

Saya menangani masalah yang sama:

Ubah ke direktori MongoDB yang berisi bindirektori, dan jalankan:

sudo bin/mongod 

Menjalankan MongoDB sebagai pengguna root, Anda mungkin diminta untuk memasukkan kata sandi root. Jika Anda masih tidak dapat menjalankan MongoDB, maka periksa izin untuk direktori data MongoDB. Memasukkan:

ls -ld /data

atau ketik ls -l /untuk izin untuk semua direktori dan file dalam direktori termasuk/data direktori.

Mode izin untuk pengguna root harus " rwx", yang berarti pengguna root dapat membaca, menulis, dan mengeksekusi file. Untuk mewujudkannya, kami menggunakan:

chmod 755 /data 

755adalah notasi oktal untuk mengatur izin, dari /datadirektori ke "rwxr-xr-x ", yang berarti pengguna root dapat membaca, menulis, dan mengeksekusi, sedangkan "grup" dan "semua orang" hanya dapat membaca dan mengeksekusi.

Catatan: Saat Anda tidak bisa melakukan ini, ketik saja:

sudo chmod 755 /data   

untuk mengatur izin sebagai pengguna root.

Kemudian, ketika selesai dengan langkah itu, ambil kembali mode izin menggunakan:

ls -ld /data

yang seharusnya terlihat seperti:

drwxr-xr-x  3 root  wheel  102 Mar  3 17:00 /data

Anda tidak perlu khawatir tentang " d" di awal, dan perhatikan bahwa izin mencerminkan " rwxr-xr-x".

Anda sekarang dapat mengubah kembali ke direktori MongoDB dan ketik:

sudo bin/mongod  

untuk menjalankan MongoDB.

yifan li
sumber
2
Ide buruk, JANGAN PERNAH menjalankannya sebagai sudo. Ada solusi yang lebih baik yang mengelola pengguna / grup untuk mongod atau mongodb tergantung pada distro Anda. Jangan gunakan solusi ini.
Andy
2

Anda hanya perlu menjalankan perintah sebagai pengguna super:

cukup ketik dari terminal: sudo su mongod

David Noleto
sumber
1
Itu selalu merupakan ide yang buruk untuk menjalankan program seperti ini sebagai superuser. Lebih baik untuk memperbaiki izin folder
Jason
2

Jika Anda menggunakan Windows , dan Anda mencoba mengatur MongoDB, jalankan cmd karena Admnistrator adalah jalan maju seperti yang disarankan Enrique di atas, lihat di sini

Adewale Olaoye
sumber
-1

Ini bekerja untuk saya di Ubuntu LTS 20.04:

$ sudo service mongod start
sagar kumar
sumber
1
Tolong jelaskan, mengapa Anda pikir itu akan bekerja untuk orang lain juga!
sauhardnc
1
Tolong jelaskan resolusi secara lebih rinci dengan lebih banyak wawasan seperti menjelaskan alasan sebenarnya, menambahkan Anda potongan kode kerja dan langkah-langkah yang harus dilakukan untuk memberantas masalah. Untuk detail lebih lanjut, kunjungi panduan StackOverflow.
Kapil Raghuwanshi