Tidak dapat membuat / membuka file kunci: /data/mongod.lock errno: 13 Izin ditolak

187

Bagaimana cara saya mendapatkan mongo untuk menggunakan drive yang terpasang di EC2? Saya benar-benar tidak mengerti. Saya memasang volume pada EC2 yang memformat drive sebagai root dan mulai sebagai root dan sebagai root saya tidak bisa mengakses? Saya menjalankan di ubuntu 12.04. Tidak ada mongo lain yang berjalan

Saya melihat bahwa mongo membuat dir 'db' di / data ie / data / db

cd /
ls -al
drwxr-xr-x  4 root root  4096 Mar  5 16:28 data

cd /data
ls -al
total 28
drwxr-xr-x  4 root root  4096 Mar  5 16:28 .
drwxr-xr-x 24 root root  4096 Mar  5 16:28 ..
drwxr-xr-x  2 root root  4096 Mar  5 16:28 db
drwx------  2 root root 16384 Mar  5 16:20 lost+found


sudo mkfs.ext3 /dev/xvdh
sudo mkdir /data
sudo su - -c 'echo "/dev/xvdh %s auto noatime 0 0" | sudo tee -a /etc/fstab'
sudo mount /data

sudo service mongodb start
mongodb start/running, process 17169

sudo ps -ef | grep mongod
ubuntu   15763 15634  0 16:32 pts/2    00:00:00 tail -f mongodb.log
ubuntu   18049 15766  0 16:43 pts/3    00:00:00 grep --color=auto mongod


Tue Mar  5 16:33:15 [initandlisten] MongoDB starting : pid=15890 port=27017 dbpath=/data 64-bit host=aws-mongo-server-east-staging-20130305161917
Tue Mar  5 16:33:15 [initandlisten] db version v2.2.3, pdfile version 4.5
Tue Mar  5 16:33:15 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Tue Mar  5 16:33:15 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Tue Mar  5 16:33:15 [initandlisten] options: { bind_ip: "10.157.60.27", config: "/etc/mongodb.conf", dbpath: "/data", logappend: "true", logpath: "/var/log/mongodb/mongodb.log", replSet: "heythat" }
Tue Mar  5 16:33:15 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Tue Mar  5 16:33:15 dbexit: 
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to close listening sockets...
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to flush diaglog...
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to close sockets...
Tue Mar  5 16:33:15 [initandlisten] shutdown: waiting for fs preallocator...
Tue Mar  5 16:33:15 [initandlisten] shutdown: lock for final commit...
Tue Mar  5 16:33:15 [initandlisten] shutdown: final commit...
Tue Mar  5 16:33:15 [initandlisten] shutdown: closing all files...
Tue Mar  5 16:33:15 [initandlisten] closeAllFiles() finished
Tue Mar  5 16:33:15 [initandlisten] shutdown: removing fs lock...
Tue Mar  5 16:33:15 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Tue Mar  5 16:33:15 dbexit: really exiting now

Di bawah ini adalah jika saya memulai kembali ketika saya menghapus file kunci ....

Tue Mar  5 16:59:15 [initandlisten] MongoDB starting : pid=21091 port=27017 dbpath=/data 64-bit host=aws-mongo-server-east-staging-20130305161917
Tue Mar  5 16:59:15 [initandlisten] db version v2.2.3, pdfile version 4.5
Tue Mar  5 16:59:15 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Tue Mar  5 16:59:15 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Tue Mar  5 16:59:15 [initandlisten] options: { bind_ip: "10.157.60.27", config: "/etc/mongodb.conf", dbpath: "/data", logappend: "true", logpath: "/var/log/mongodb/mongodb.log", replSet: "heythat" }
Tue Mar  5 16:59:15 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Tue Mar  5 16:59:15 dbexit: 
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to close listening sockets...
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to flush diaglog...
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to close sockets...
Tue Mar  5 16:59:15 [initandlisten] shutdown: waiting for fs preallocator...
Tue Mar  5 16:59:15 [initandlisten] shutdown: lock for final commit...
Tue Mar  5 16:59:15 [initandlisten] shutdown: final commit...
Tue Mar  5 16:59:15 [initandlisten] shutdown: closing all files...
Tue Mar  5 16:59:15 [initandlisten] closeAllFiles() finished
Tue Mar  5 16:59:15 [initandlisten] shutdown: removing fs lock...
Tue Mar  5 16:59:15 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Tue Mar  5 16:59:15 dbexit: really exiting now
Tampa
sumber
1
Sepertinya mongod ditutup dengan buruk terakhir kali dijalankan dan tidak dapat membersihkan file mongod.lock yang dibuatnya. File ini ada untuk mencegah beberapa instance mongod dari bekerja pada file. Jika Anda menghapus file dan mencoba menjalankan mongod lagi, Anda seharusnya tidak memiliki masalah
ACE
2
Lihat pertanyaan terbaru. Masalah yang sama jika menghapus file kunci
Tampa
Tampaknya masih ada masalah dengan lockfile, apa saja izin pada direktori tempat lockfile berada? TBH Saya hanya melihat ini dalam 2 kasus: 1) lockfile sudah ada dan 2) mongod tidak memiliki izin untuk membuat lockfile di lokasi yang diinginkan.
ACE
1
Anda harus memastikan bahwa pengguna mongo memiliki akses chown mongodb:mongodb on /var/lib/monogdb,, juga pada direktori data.
Hans N. Hjort

Jawaban:

117

Saya mengalami masalah yang sama pada contoh Ubuntu ec2. Saya mengikuti artikel amazon ini di halaman 7:

http://d36cz9buwru1tt.cloudfront.net/AWS_NoSQL_MongoDB.pdf

Jalur Mongodb di /etc/mongodb.confdiatur ke /var/lib/mongodb(lokasi pemasangan utama dan berfungsi). Ketika saya berubah menjadi /data/db(volume EBS) saya mendapatkan 'errno: 13 Izin ditolak'.

  1. Pertama saya berlari sudo service mongodb stop .
  2. Kemudian saya biasa ls -lamelihat grup & pemilik mongodb yang ditugaskan untuk /var/lib/mongodb(jalur yang ada) dan saya mengubah /data/db(jalur baru) dengan chowndan chgrpuntuk mencocokkan. (contoh:sudo chown -R mongodb:mongodb /data/db :)
  3. Lalu saya memperbarui path etc/mongodb.confke /data/dbdan menghapus file mongo lama di/var/lib/mongodb direktori.
  4. Lalu aku berlari sudo service mongodb start dan menunggu sekitar satu menit. Jika Anda mencoba menghubungkan ke 27017 dengan segera, Anda tidak akan dapat melakukannya.
  5. Setelah satu menit, periksa /data/db(volume EBS) dan mongo seharusnya meletakkan jurnal, mongod.lock, local.ns, local.0, dll. Jika tidak mencobasudo service mongodb restart dan periksa satu menit kemudian.

Saya hanya menghabiskan lebih dari satu jam dengan ini. Mengubah grup dan menghapus file lama mungkin tidak perlu, tetapi itulah yang berhasil bagi saya.

Ini adalah video yang luar biasa tentang cara memasang volume ebs ke ec2 misalnya:

http://www.youtube.com/watch?v=gBII3o3BofU

Randy Swanson
sumber
8
Saya kesulitan dengan masalah ini, dan menyadari bahwa jika Anda mencantumkan Anda mencantumkan folder tujuan Anda dengan ls -lahZ itu akan memberi Anda konteks keamanan, konteks untuk folder data mongo harus ditetapkan seperti: "sudo chcon -R -u system_u -t mongod_var_lib_t / folder / data "ini selain izin yang jelas dan kombinasi pengguna: grup. Semoga ini bisa membantu.
jmdiego
478

Saya menggunakan metode ini untuk menyelesaikan masalah:

sudo chown -R mongodb:mongodb /data/db
Haimei
sumber
8
Tambahkan -Ropsi dan sempurna :)
Adrien
7
itu: sudo chown -R id -u/ data / db untuk yang belum tahu. :)
rncrtr
8
Ternyata ada masalah dengan backtick. Coba jalankan sudo chown $USER /data/dbalih-alih perintah aslinya.
Paymahn Moghadasian
7
Ini memang jawaban yang benar. @Tampa Anda harus menerima jawaban ini. btw - Anda tidak perlu id -Uatau $USERbarang. mongo memiliki pengguna / grup sendiri. Anda bisa dan harus kode keras mongodb: mongodb. jadi perintahnya sederhanasudo chown -R mognodb:mognodb /data/db
guy mograbi
11
Apa yang sebenarnya ini lakukan? Itu bekerja, tetapi akan sangat senang untuk memahami :)
zero_cool
81

Dalam kasus saya (contoh AWS EC2, Ubuntu) membantu:

$ sudo mkdir -p /data/db/
$ sudo chown `USERNAME` /data/db

Dan setelah itu semuanya bekerja dengan baik.

Belhor
sumber
6
Ini adalah jawaban terbaik, kemungkinan besar masalah izin dengan pengguna yang menjalankan mongod
davo
2
Ya, ini adalah jawaban terbaik
Vegan Sv
1
Kami mengubah / mengalihkan kepemilikan /data/dbkeUSERNAME
Saif
52

Anda hanya perlu memberikan akses ke blog Anda /data/db folder .

Ketik sudo chown -R <USERNAME> /data/db, ganti<USERNAME> dengan nama pengguna Anda.

Anda dapat menemukan nama pengguna Anda dengan mengetik whoami.

julien bouteloup
sumber
12

Saya menginstal mongodb dengan EBS pada EC2 dengan Ubuntu 14.04 berikut tutorial ini:

http://docs.mongodb.org/ecosystem/platforms/amazon-ec2/

Tapi bukannya chown yang disarankan saya lakukan:

sudo chown -R mongodb:mongodb /data /log /journal

Menyelesaikan masalah

Evers
sumber
2
Ya, sepertinya pemilik harus "mongodb" bukannya "root" sesuatu.
Imskull
10

Saya memiliki masalah yang sama, alasan sebenarnya adalah bahwa sudah ada sesi mongod berjalan dari upaya saya sebelumnya.

Saya berlari

killall mongod

dan semua yang lain berjalan seperti yang diharapkan.

killallperintah akan mengirim sinyal TERM ke semua proses dengan UID nyata. Jadi ini membunuh semua instance dari menjalankan mongod sehingga Anda bisa memulai sendiri.

Venky Soorisetty
sumber
Ini benar-benar jawaban terpendek dan satu-satunya jawaban yang memecahkan masalah saya setelah berjam-jam yang tak terhitung jumlahnya ... terima kasih!
moomoochen
Senang itu membantu! :) Berharap ada cara untuk membantu orang menemukan jawaban ini dengan lebih mudah.
Venky Soorisetty
7

Sampai hari ini, saya mencoba mencari cara untuk membuat / membuka file kunci: /data/db/mongod.lock errno: 13 Izin ditolak Apakah instance mongod sudah berjalan ? , mengakhiri , dan mencoba semua jawaban yang diposting di atas untuk pecahkan masalah ini, maka tidak ada yang berhasil dengan menambahkan

sudo chown -R mongodb: mongodb / data / db

Kecuali saya menambahkan izin pengguna saya saat ini ke jalur lokasi oleh

sudo chown $ USER / data / db

Semoga ini bisa membantu seseorang. Juga saya baru saja menginstal Mongo DB pada pi saya. Bersulang!

Abdullah
sumber
Ini adalah solusi aktual untuk masalah ini
Sahil Nagpal
6

Saya memiliki masalah yang sama dan mengikuti semua instruksi di atas tentang mengubah pemilik menggunakan sudo chown dll. Saya masih memiliki contoh mongodb berjalan di latar belakang setelah perubahan. Lari

ps auxw | grep mongo 

menunjukkan kepada saya tugas-tugas lain menggunakan mongo yang berjalan di latar belakang yang tidak ditutup dengan benar. Saya kemudian menjalankan kill pada semua yang berjalan dan kemudian dapat memulai server saya.

Eugene G
sumber
6

Untuk pengguna mac:
Jalankan ls -ld / data / db /
Output harus seperti drwrx-xr-x 20 roda singh 680 21 Jul 05:49 / data / db /
Di mana singh adalah pemilik dan roda adalah grup yang dimilikinya. .
Jalankan sudo chown -R singh: roda / data / db
Jalankan mongod

amanSingh
sumber
5

Menghapus file mongodb.lock bukan masalah dalam kasus saya. Saya melakukannya dan mendapat kesalahan tentang port yang sedang digunakan: [initandlisten] listen (): bind () gagal errno: 98 Alamat sudah digunakan untuk socket: 0.0.0.0: 7017. Saya menemukan solusi lain di sini: tidak dapat memulai server lokal mongodb dengan instruksi untuk mematikan proses:

  1. Cari tahu dari netstat proses mana yang menjalankan port mongodb (27017)

    sudo netstat -tulpn | grep :27017

    Output akan menjadi: tcp 0 0 0.0.0.0:7017 0.0.0.0:* DENGARKAN 1412 / mongod

  2. Bunuh proses yang sesuai.

    sudo kill 1412 (ganti 1412 dengan ID proses Anda yang ditemukan di langkah 1)

Dan saya berhasil memulai mongodb lagi. Saya percaya saya masih berjalan dari penutupan yang tidak tepat.

Casey Murray
sumber
4

Bagi Anda yang mengalami kesalahan ini di Windows menggunakan Task Manager, mengakhiri contoh "mongod.exe" yang sedang berjalan. Setelah itu selesai secara permanen hapus file mongo.lock dan jalankan mongod.exe. Seharusnya bekerja dengan sempurna setelah itu.

b_kik
sumber
4

Mongo saya (3.2.9) diinstal pada Ubuntu, dan file log saya memiliki baris berikut:

2016-09-28T11:32:07.821+0100 E STORAGE  [initandlisten] WiredTiger (13) [1475058727:821829][6785:0x7fa9684ecc80], file:WiredTiger.wt, connection: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied 
2016-09-28T11:32:07.822+0100 I -        [initandlisten] Assertion: 28595:13: Permission denied 
2016-09-28T11:32:07.822+0100 I STORAGE  [initandlisten] exception in initAndListen: 28595 13: Permission denied, terminating

2016-09-28T11: 32: 07.822 + 0100 I CONTROL [initandlisten] dbexit: rc: 100

Jadi masalahnya adalah dalam izin pada folder / var / lib / mongodb.

sudo chown -R mongodb:mongodb /var/lib/mongodb/
sudo chmod -R 755 /var/lib/mongodb
  • Mulai ulang server

Memperbaikinya, meskipun saya menyadari bahwa mungkin tidak terlalu aman (ini adalah kotak dev saya sendiri dalam kasus saya), sedikit mengikuti perubahan db dan otentikasi berfungsi.

Nestor Milyaev
sumber
2

In Mycase
In mongodb versi 2.6.11 direktori databse default adalah/var/lib/mongodb/

  1. $ sudo chown -R id -u/ var / lib / mongodb /

  2. $ sudo chown -R id -u/var/lib/mongodb/mongod.lock

  3. $ sudo /etc/init.d/mongod stop

  4. $ sudo /etc/init.d/mongod start

vijay
sumber
harus `id -u`
marcus
2

Saya mendapat masalah yang sama ketika saya menjalankan perintah mongod setelah menginstalnya pada Windows10. Saya menghentikan layanan mongodb dan mulai lagi. Bekerja seperti pesona

Perintah untuk menghentikan layanan mongodb (di windows): net stop mongodb

Perintah untuk memulai server mongodb: mongod --dbpath PATH_TO_DATA_FOLDER

aditya
sumber
1

Pada Fedora 18 dengan Mongo 2.2.4 misalnya saya bisa mengatasi kesalahan yang sama dengan menonaktifkan SELinux dengan menelepon setenforce 0 sebagai root.

BTW, ini adalah lingkungan perusahaan, bukan contoh Amazon EC2, tetapi gejalanya mirip.

GSP
sumber
1

Dalam kasus saya, masalah ini diselesaikan dengan menghapus file log .

sudo rm /log/mongod.log

Meskipun pesan kesalahan merujuk secara khusus ke file kunci :

exception in initAndListen: 10309 Unable to create/open lock file: 
/data/mongod.lock errno:13 Permission denied 
Is a mongod instance already running?, terminating
Ian Mercer
sumber
Ini mengarahkan saya ke arah yang benar. PADA server saya, saya harus melakukan sudo rm /var/log/mongodb/mongodb.log dan sudo rm /tmp/mongodb-27017.sock.
Keith John Hutchison
1

Setelah saya membunuh mongod, saya hanya memiliki masalah yang sama: tidak dapat memulai mongod.

$> sudo kill `pidof mongod`

2015-08-03T05:58:41.339+0000 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongodbtest/replset/data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

Setelah saya menghapus kunci secara langsung, saya dapat memulai kembali proses mongod.

$>  rm -rf /data/mongodbtest/replset/data/mongod.lock
Andy Dong
sumber
1

Inilah yang saya lakukan untuk memperbaiki masalah:

$ sudo mkdir -p / data / db

$ export PATH = / usr / local / Cellar / mongodb / 3.0.7 / bin: $ PATH

$ sudo chown -R id -u/ data / db

dan kemudian memulai mongo ...

$ mongod

pengguna4660857
sumber
1

Saya memiliki masalah yang sama.

Saya menyelesaikannya dengan mengubah status selinux menjadi permisif dengan perintah di bawah ini:

setenforce 0
Maryam Jafari
sumber
0

Lakukan ls -launtuk mengetahui pengguna dan grup / var / log / mongodb. Lalu lakukan sudo chown -R user:group /data/db Sekarang jalankan sudo service mongodb start. Periksa status dengansudo service mongodb status

Tasneem Haider
sumber
0

Pada windows pastikan konsol dijalankan sebagai aministrator

Iacobescu Radu
sumber
0

Anda bisa mencoba dengan cara ini. 1

sudo chown -R mongod: mongod / data / db

tetapi pada beberapa waktu, ini tidak berguna. Ke-2 jika cara di atas tidak berguna, Anda dapat mencoba melakukan ini:

mkdir / data / db #adalah jalur penyimpanan basis data

nohup mongod --dbpath / data / db &

atau ketik:

mongod --dbpath / data / db

untuk mendapatkan aliran output

Wotchin
sumber
Mengingat ini adalah pertanyaan lama, dan jawaban Anda tidak menambahkan apa pun yang belum ada di sana, Anda harus bertanya pada diri sendiri apakah itu berharga ...
Nic3500
0

Bagi saya di CentOS 6.x:

sudo chown -R mongodb:mongodb <db-path> sudo service mongod restart

Dan Aku telah menetapkan kustom db-pathdi /etc/mongod.conf.

yangsibai
sumber
0

Di Server Centos

ini bekerja untuk saya

chown -R mongod:mongod /var/lib/mongo
Rajiv Sharma
sumber
0

Mendapat kesalahan yang sama, diperbaiki dengan menghapus semua catatan (dalam direktori kasus saya journals, dan file mongo.lock...), setelah itu periksa port dengan sudo lsof -i:27017, jika ada sesuatu yang berjalan di atasnya kill <PID of the process>, dan coba jalankan ./mongodlagi

chavy
sumber
-2

Memperbaiki: sudo mongod

Saya memiliki masalah yang sama, menjalankan mongod dengan hak sudo memperbaikinya. Berasal dari lingkungan windows, saya hanya menggunakanmongod untuk memulai daemon, nampaknya kita membutuhkan hak akses superuser untuk mengakses / data / db.

Anda juga dapat memberikan izin baca dan tulis kepada pengguna non-root ke jalur itu. periksa jawaban di atas untuk panduan!

aimuhire
sumber
Menjalankan mongod sebagai root tidak diperlukan dan dapat membuat sistem lebih rentan terhadap eksploitasi
qbert220
-2

Setiap kali Anda ketika Anda mencoba memulai mongod ketik saja

sudo mongod

atau jika ingin memperbaikinya secara permanen, coba berikan rwx premission ke folder / data / db

 chmod +rwx data/
Shishir
sumber
Tidak satu pun dari ini adalah ide yang bagus. Yang pertama bisa membuat sistem lebih rentan terhadap eksploitasi keamanan. Yang kedua dapat memungkinkan pengguna yang tidak
beruntung