MongoDB: initAndListen'de istisna: 20 Salt okunur bir dizinde bir kilit dosyası oluşturulmaya çalışıldı: / data / db, sonlandırma


146

/data/dbKök dizinde oluşturdum ve koştum ./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

4
izin sorunu gibi görünüyor. Mongod çalıştıran kullanıcının / data / db dizinine yazma izni var mı? Çıktısını paylaşın ls -ld /data/dbve idböylece tavsiyede bulunabiliriz.
Bjorn Roche

drwxr-xr-x 2 kök kökü 4096
whinytween96

uid = 1000 (kullanıcı) gid = 1000 (kullanıcı) grupları = 1000 (kullanıcı), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween96

@BjornRoche -ldbölüm için teşekkürler :)
Skynet

@BjornRoche benim çıktı drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbve hala hata alıyorum. Herhangi bir fikir?
Blake

Yanıtlar:


278

Sorun, oluşturduğunuz dizinin /data/dbsahip olduğu ve yalnızca kök kullanıcı tarafından yazılabilir olması, ancak mongod'u kendiniz olarak çalıştırmanızdır. Bunu çözmenin birkaç yolu vardır, ancak sonuç olarak söz konusu dizine doğru izinleri vermelisiniz. Bu üretim içinse, dokümanları kontrol etmenizi ve bunu dikkatli bir şekilde düşünmenizi tavsiye ederim - muhtemelen özel bakım almak istersiniz.

Ancak, bu sadece test içinse ve sadece çalışmak ve onunla çalışmak için buna ihtiyacınız varsa, dizini herkes tarafından yazılabilir hale getirecek olan bunu deneyebilirsiniz:

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

veya dizinin size ait olmasını sağlayacak olan:

> sudo chown -R $USER /data/db

4
Birinin içindeki -Rtüm /data/dbdosyaları tekrar tekrar değiştirmesi gerektiğini düşünüyorum .
YongHao Hu

2
Bunun için teşekkürler. Denedi ve hala aynı hatayı alıyor
Samuel Dare

1
Bu konu zaten biraz eski, ama benim chmodiçin yeni bir hata oluşturdu initAndListen : operation not permitted, ancak chownçalıştı.
bachinblack

chown benim için de yaptı
dwagnerkc

Bir dizine 777 umask vermek kötü bir uygulamadır. 755'i ayarlayabilirsiniz ve işe chmod -R 755 /data/db
yarar


25

Sisteminiz SELinux kullanıyorsa, oluşturduğunuz dizin için doğru içeriği kullandığınızdan emin olun:

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

ve bağlamı klonlayın:

chcon -R --reference=/var/lib/mongo /data/db

1
Günümü kurtardın! Çok teşekkür ederim
Keerthivasan

2
ls -dZ / var / lib / mongodb / mongo'nun sonraki sürümleri için
espeed

17

Aynı sorunu yaşadım ve aşağıdaki çözümü bu sorunu çözdüm. Aşağıdaki çözümü denemelisiniz.

sudo mkdir -p / data / db
sudo chown -R 'kullanıcı adı' / data / db


9

resim açıklamasını buraya girinHer şeyden önce tüm mongoDB hizmetlerini durdurun , sonra üzerinde bir dizin oluşturun /, yoksa kök demektir, yoksa bağlantı noktası dosyasını da kaldırın. bu dizine tüm izinleri verin, dizin sahibi olun, aşağıdaki komutu çalıştırın:

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

Şimdi bitti, sadece MongoDB servisini başlatın, eğer yardımcı olmadıysa , portu aşağıdaki gibi değiştirmeye çalışın:

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

Not: Benim için tüm bu şeyler çalışıyor ve umarım sizin için işe yarar, adamım!


5

/data/db(Veya /var/lib/mongodb) izinlerini düzeltin :

sudo chown -R mongodb: /data/db

sonra MongoDB'yi yeniden başlatın, örn.

sudo systemctl restart mongod

Bu yardımcı olmazsa, / var / lib / mongodb'den farklı bir veri dizini kullanıyorsanız hata mesajınızı kontrol edin. Bu durumda koş

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

kaynak


4

Güzel çözümler, ama merak ediyorum neden kimse pencere için çözüm vermiyor.

Eğer windows kullanıyorsanız cmd "Yönetici olarak çalıştır" yeterlidir.


6
Bence insanlar genellikle Windows'ta veritabanı sunucuları çalıştırmıyorlar.
Blake

1
Ayrıca, yönetici / root olarak bir veritabanı çalıştırmak burada diğer yorumları kontrol etmek kötü bir fikir olduğunu bunun gibi daha fazla ayrıntı için
Nino Filiu

4

Mongodb günlüklerinizi kontrol ediyorsanız ve böyle bir hata alıyorsanız, yaptığım gibi adımları izleyin. Dizininizdeki izin sorunları nedeniyle oluşur /data/db. Ubuntu16.04 kullanıyorum ve aşağıdaki gibi iki basit komut çalıştıran bir çözüm buluyorum.

Adım 1: / data / db dizinine izin verin:

sudo chmod -R 0777 /data/db

2. Adım: Mongod hizmetini şu şekilde başlatmayı deneyin:

sudo service mongod start

3. Adım: Mongod hizmetinin durumunu kontrol edin:

sudo service mongod status

2
1. Adım, tüm kullanıcılara okuma / yazma / yürütme izinleri verir. Bu kullanılmamalıdır.
Jonas Franz

Teşekkürler @JonasFranz, geri bildiriminiz için, bu durumda üretim sunucusu için 0755 iznini kullanabiliriz. Yanlışım varsa lütfen düzelt.
Jitendra

3

Veritabanı dizinlerinin kökte olması gerekmiyorsa data/db, giriş dizininizde ( mkdir -p ~/data/db) oluşturabilirsiniz.

Ardından MongoDB sunucusunu aşağıdaki --dbpathseçenekle başlatabilirsiniz :

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

(Bu bir terminalden başlattığınızı varsayar. Garip bir nedenle, mongodana dizin yolu olarak ~ kabul etmez, bu nedenle bash echo ikame hilesi, yazabilirsiniz /home/yourusername/data/db)

Aslında, olması gerekmiyor, ~/data/dbistediğiniz her yerde olabilir ve bu şekilde birden fazla veritabanı yoluna sahip olabilir ve her şeyi güzelce düzenleyebilirsiniz. Üretim için en iyi seçenek olmayabilir (ne yapmak istediğinize bağlı olarak), ancak iyi işler geliştirmek için.


3

Aynı sorunu ele aldım:

Dizini içeren MongoDB dizinine geçin binve çalıştırın:

sudo bin/mongod 

Kök kullanıcı olarak MongoDB'yi çalıştırırken kök parolayı girmeniz istenebilir. Hala MongoDB'yi çalıştıramıyorsanız, MongoDB'nin veri dizini için izinleri kontrol edin. Giriş:

ls -ld /data

veya ls -l /dizindeki tüm dizin ve dosyaların izinlerini yazın ./data dizindeki .

Kök kullanıcı için izin modu " rwx" olmalıdır , yani kök kullanıcı dosyaları okuyabilir, yazabilir ve yürütebilir. Bunu yapmak için şunu kullanırız:

chmod 755 /data 

755/datadizinin izinlerini " rwxr-xr-x" olarak ayarlamak için sekizli bir göstergedir , yani kök kullanıcı okuyabilir, yazabilir ve yürütebilir, "grup" ve "herkes" yalnızca okuyabilir ve yürütebilir.

Not: Bunu yapamadığınızda, şunu yazın:

sudo chmod 755 /data   

Kök kullanıcı olarak izni ayarlamak için.

Ardından, bu adımla işiniz bittiğinde, izin modlarını kullanarak yeniden yakalayın:

ls -ld /data

hangi gibi görünmelidir:

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

dBaşlangıçta " " hakkında endişelenmenize ve izinlerin "rwxr-xr-x .

Şimdi MongoDB dizinine geri dönebilir ve şunu yazabilirsiniz:

sudo bin/mongod  

MongoDB'yi çalıştırmak.


2
Kötü fikir, ASLA onu sudo olarak çalıştırmayın. Dağıtımınıza bağlı olarak kullanıcıyı / grubu mongod veya mongodb olarak yöneten daha iyi çözümler vardır. Bu çözümü kullanmayın.
Andy

2

komutu süper kullanıcı olarak çalıştırmanız yeterlidir:

sadece terminalden yazın: sudo su mongod


1
Bir süper kullanıcı olarak böyle programları çalıştırmak her zaman kötü bir fikirdir. Klasörlerin izinlerini düzeltmek daha iyi
Jason

2

On değilseniz Windows'un ve kurulum MongoDB çalışıyoruz, Admnistrator olarak çalıştırmak cmd olarak yolu ileri olan Enrique yukarıda önerdi burada görmek


-1

Bu Ubuntu LTS 20.04'te benim için çalıştı:

$ sudo service mongod start

1
Lütfen neden başkaları için de işe yarayacağını düşündüğünüzü açıklayın!
sauhardnc

1
Lütfen özümü açıklamak, çalışma kodu snippet'i eklemek ve sorunları ortadan kaldırmak için gerçekleştirilecek adımlar gibi daha ayrıntılı bilgilerle çözünürlüğü daha ayrıntılı olarak açıklayın. Daha fazla ayrıntı için StackOverflow yönergelerini ziyaret edin.
Kapil Raghuwanshi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.