Mongod, / data / db klasörü olmadığından şikayet ediyor


474

Bugün yeni mac'umu ilk defa kullanıyorum. Bir / data / db dizini oluşturduğu adıma kadar mongodb.org üzerinde başlangıç ​​kılavuzu takip ediyorum. btw, homebrew yolunu kullandım.

Bu yüzden bir terminal açıyorum ve ben "Ls" yaptığım için, ben Home Directory adlı ne olduğumu düşünüyorum, Masaüstü Uygulama Filmler Müzik Resimler Belgeler ve Kütüphane klasörleri görüyorum.

Ben de yaptım

mkdir -p /data/db

ilk olarak, izin reddedildiğini söylüyor. Yarım saat farklı şeyler denemeye devam ettim ve sonunda:

mkdir -p data/db

çalıştı. ve "ls", veri dizini ve iç içe bir db klasörü var.

sonra mongod ateş ve veri / db bulmak değil şikayet

Yanlış bir şey mi yaptım?

Şimdi yaptım

sudo mkdir -p /data/db

ve "ls" yaptığımda veri dir ve db dir görüyorum. db dir içinde olsa, içinde kesinlikle hiçbir şey yok ve ben şimdi mongod çalıştırmak

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 için hata mesajı alınıyor

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

Herkese teşekkürler!


1
"Geçersiz argüman", mongo kullanıcısının sembolik adının sisteminizde farklı olduğu anlamına gelir - muhtemelen MongoDB'yi yüklemek için farklı bir paket veya yükleme mekanizması kullanıyorsunuzdur. / Etc / passwd ve / etc / group dosyalarınızı mongo kullanıcısının sembolik adını (veya uid / gid) kontrol etmelisiniz grep mongo /etc/passwd /etc/group. Bu işe yaramazsa, dizinin sahibini kontrol ederek adı kontrol edin ls -ld /var/lib/mongo. Ya uid / gid bunu görmek için: ls -lnd /var/lib/mongo. Benim durumumda drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ...- bu, param olarak 487: 480 kullanmak anlamına geliyor
Tilo

UID / GID kullanmak sembolik isimle eş anlamlıdır. örneğin, 'mongod: mongod'u yukarıdaki yöntemle bulduğunuz uid / gid numaraları ile değiştirin ..
Tilo

Şimdi bu dizini (data / db) nasıl düzgün bir şekilde ekleyeceğimizi bildiğimize göre, bu dizin neden kurulumda ilk sırada yer almıyor?
winux

MacOS 10.15 sürümüne
geçtiyseniz

MAC'in son sürümüne sahipseniz: Yeni macOS Catalina güncellemesiyle "/ data / db" klasörü salt okunur hale gelir, değiştiremezsiniz. Başka bir klasörde DB oluşturmak için bu prosedürü izleyin: 1) Mongod dizinini değiştirin: sudo mongod --dbpath / System / Volumes / Data / data / db 2) Bir diğer ad verin: alias mongod = "sudo mongod --dbpath / System / Ciltler / Veri / veri / db "
Farbod Aprin

Yanıtlar:


636

Dizini yanlış yerde oluşturdunuz

/ data / db, doğrudan '/' kök dizininin altında olduğu anlamına gelir, oysa 'data / db' (baştaki / olmadan) büyük olasılıkla '/ root' ev dizini gibi başka bir dizinin içinde oluşturdunuz.

Bu dizini kök olarak oluşturmanız gerekir

Ya kullanmanız gerekir sudo, örn.sudo mkdir -p /data/db

Veya su -süper kullanıcı olmak ve ardından dizinimkdir -p /data/db


Not:

MongoDB'de ayrıca veri dizinini başka bir yerde oluşturabileceğiniz bir seçenek de vardır, ancak bu genellikle iyi bir fikir değildir, çünkü DB kurtarma gibi şeyleri biraz karmaşıklaştırır, çünkü her zaman db yolunu manuel olarak belirtmeniz gerekir. Bunu tavsiye etmem.


Düzenle:

aldığınız hata iletisi "Kilit dosyası oluşturulamıyor / açılamıyor: /data/db/mongod.lock errno: 13 İzin reddedildi" . Oluşturduğunuz dizin doğru izinlere ve sahipliğe sahip değil gibi görünüyor - MongoDB işlemini çalıştıran kullanıcı tarafından yazılabilir olması gerekiyor.

'/ Data / db /' dizininin izinlerini ve sahipliğini görmek için şunu yapın: (izinler ve sahiplik böyle görünmelidir)

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

Sol taraftaki 'drwxr-xr-x' Kullanıcı, Grup ve Diğerleri için izinleri gösterir. 'mongod mongod' dizinin kime ait olduğunu ve bu dizinin hangi gruba ait olduğunu gösterir. Bu durumda her ikisine de 'mongod' denir.

'/ Data / db' dizininizin yukarıdaki izinleri ve sahipliği yoksa, bunu yapın :

Önce mongo kullanıcınızın hangi kullanıcı ve grupta olduğunu kontrol edin:

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

/ Etc / passwd içindeki mongod için bir girişiniz olmalı, çünkü bu bir daemon.

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

Kullanıcı adını ve grup adını aşağıdaki gibi de kullanabilirsiniz: (/ etc / passwd ve / etc / group içinde bulunabilirler)

sudo chown -R mongod:mongod /data/db 

bu işe yarayacak ..

Aşağıdaki yorumlarda, bazı insanlar bunu kullandı:

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

veya

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

Dezavantajı $ USER bir giriş kabuğu olan bir hesap olmasıdır. Daemons, güvenlik nedenleriyle ideal olarak bir kabuğa sahip olmamalıdır, bu yüzden yukarıdaki şifre dosyasının grep'inde / bin / false ifadesini görürsünüz.

Dizin izinlerinin anlamını daha iyi anlamak için buraya bakın:

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

Belki Google üzerinden bulabileceğiniz eğiticilerden birine de göz atın: "Yeni başlayanlar için UNIX"


2
yapmaya çalışın ls -ld /data/ ve ls -ld /data/db/.. sol tarafta listelenen dizin izinlerini, daha sonra sahipliği, ardından dizin adını göreceksiniz. dizinlerin MongoDB çalıştıran kullanıcı kimliği tarafından yazılabilir olduğundan emin olmalısınız.

2
@Tilo Evet onları yaptım. Birincisi, chmod tamamlandı, ikincisi "chown: mongod: Geçersiz argüman" diyor
Nik So

3
Bu bütün iplik tam olarak yaşadığım şey. Ama aynı zamanda sistemimde mongo'nun kullanıcı kimliği ve grup kimliğinin ne olduğunu anlayamıyorum ya da herhangi bir yerde herhangi bir belge bulamıyorum. Ben chog mongod sıkışmış: mongod bölüm olarak onun dönen birinvalid arguement
Seyahat

10
Güncelleme ile gittim sudo touch /data/db/mongod.lockve sudo chmod 0777 /data/db/mongd.lock. Hemen başladı.
Yolculuk

141
Koşmak sudo chown -R `id -u` /data/dbya da sudo chown -R $USER /data/dbyerine sudo chown mongod:mongod /data/dbbenim için hile yaptı
heitortsergent

117

Nik ile aynı hatayı aldıktan sonra

chown: id -u: Geçersiz argüman

Bu görünüşte (olmalıydı tırnak türü yanlış kullanmaktan meydana öğrendim backquotes ) Ubuntu Forum

Bunun yerine az önce kullandım

sudo chown $ USER / data / db

alternatif olarak ve şimdi mongod ihtiyacı olan izinlere sahiptir.


4
Birisi yararlı bulursa: Aynı sorunu yaşadım, ancak hata mesajı biraz farklıydı (chown mongod: mongod'u denediğimde 'mongod' grubunun mevcut olmadığını söyledi) -> ancak chown $ USER kullanarak çalıştı bana, teşekkürler ...
trainoasis

6
Buna bir -R eklemek zorunda kaldım. "sudo chown -R $ USER / data / db"
Kevin

1
Yeni başlayanlar için mükemmel cevap,
Pyae Sone

90

Bu benim için çalışıyor, yorumlarda bulundu:

sudo chown -R $USER /data/db

2
Ayrıca benim için. OSX'ime homebrew üzerinden mongo kurmak mongod kullanıcısı ve grubu eklemez.
Zauker

73

Klasörü oluşturun.

sudo mkdir -p /data/db/

Klasöre kendiniz izin verin.

sudo chown `id -u` /data/db

Sonra mongodolmadan koşabilirsiniz sudo. OSX Yosemite üzerinde çalışır


1
Yeni dizin oluşturmak yerine mongod hizmetini yeniden başlatmayı deneyin. Örn: - hizmet mongod yeniden başlatma
Devendra Bhat

bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
bibscy

32

OS X'te bu hatayı düzeltmek için hizmeti yeniden başlattım ve durdurdum: $ brew services restart mongodb $ brew services stop mongodb

Sonra koştum mongod --config /usr/local/etc/mongod.confve sorun ortadan kalktı.

Hata, mongodb homebrew paketini yükselttikten sonra ortaya çıktı.


23

Mac'inize YOUR_USER_NAME ve personelin grup olduğu demleme yoluyla yükleme

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

@MarkusWMahlberg Bunun için teşekkürler. garip hisseden ama çalışan şeylerden biri. o dosyanın sahibi ve grubu kim olmalı?
Gal Bracha

Bu sizin dağılımınıza bağlıdır. /etc/passwdKullanıcı adına bir göz atın - grubun aynı olması muhtemeldir. Genellikle ya mongoya mongodb.
Markus W Mahlberg

@MarkusWMahlberg ok - Şimdi düzelttim - demleme yoluyla kurarken kullanıcı ve grup oluşturmaz, bu yüzden sadece kendi kullanıcı adımı ayarladım. Şimdi daha güvenli olup olmadığına bakın. teşekkürler
Gal Bracha

Teşekkürler. Demlenmiş mac üzerinde geliştirirken, bu sorunu giderir. Mongodb'da sadece test verilerini kullanıyorsanız daha fazla güvenliğe gerek yoktur. OS X üzerinde @MarkusWMahlberg, mongod çalıştıran kullanıcı sadece "mongod &" ile başlatırsanız YOUR_USER_NAME.
gaspard

22

Mongo'yu argüman olmadan çalıştırırsanız, üretim makinesinde çalıştığınızı varsayar, böylece varsayılan konumları kullanır.

kendi veritabanınızı (dev veya yalnızca farklı bir veritabanı) kullanmak için:

./bin/mongod --dbpath ~/data/db

Bu neden /etc/mongod.conf içinde bildirilen ayarları kullanmayacağını açıklıyor mu? Ubuntu 16.04 üzerinde 3.6.5 kurulumu ile ilgili sorunlar vardı.
Koyu Star1

ayrıntılı (-v) modda başlatmaya çalışın veya config (--config) 'u açıkça zorlayın: docs.mongodb.com/manual/reference/program/mongod apt-get kullanarak yüklerseniz mongod status / start ile başlatın / stop
loreii

Mongo kütüklerine baktım. Tüm / data / db dizini eksikliği başlangıç ​​engelleme yolu söyleyerek tuttu. Sonunda cevabınıza rastladınız ve sorunların nedeni bu mu?
Karanlık Yıldız1

Bu aynı zamanda fs kökünde / data / db oluşturmanın mümkün olmadığı Windows Linux-Subsystem içinde MongoDB kullanıldığında da işe yarar.
hiergiltdiestfu

8

Varolan bir Mongodb kurulumuyla bu sorunu yaşadım. Neden hala olduğundan emin değilim, ama nedense Mongod işlemi mongod.config dosyasını bulamadı. Yapılandırma dosyasını bulamadığından, DB dosyalarını / data / db içinde, var olmayan bir klasörde bulmaya çalıştı. Ancak, yapılandırma dosyası hala kullanılabilir, bu yüzden işlemin yapılandırma dosyasına izinleri olduğundan emin olun ve mongod işlemini --config bayrağıyla aşağıdaki gibi çalıştırın:

mongod --config /etc/mongod.conf

Yapılandırma dosyasında bu ayar vardı:

storage:
  dbPath: /var/lib/mongodb

Ve bu süreç gerçek DB klasörünü tekrar bulabildi.


1
Başıma geldiğini onaylıyorum. Yapılandırma dosyası yerine --dbpath = / var / lib / mongodb ayarını yapabiliriz. Tüm verilerimi kaybettim ama yine de orada.
lenhhoxung

8

yaptım

brew install mongodb

2018-02-01'de ve bu bana mongodb3.6.2 sürümünü verdi .

Tarafından istendiğinde orluke gelen cevap yukarıda, ben sadece denedim

$ brew services restart mongodb

ve her şey hayata dönüştü. Çağrım mongoose.createConnection()istediğimi yaptı. Topluluk sürümü olan GUI MongoDB Pusulası bağlanır. local.startup_logKoleksiyona bakmak için Pusula kullandım . İçinde bir belge vardı, logum sadece mongoDB hizmetini başlattı ve

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

ve gerçekten böyle bir dosya vardı:

$ 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

ve /usr/local/var/mongodbçok sayıda belirsiz dosya içeren bir dizin vardı. Kurulum şimdi böyle çalışıyor.

brew services restartHizmeti girişte çalışacak şekilde ayarlayıp ayarlamayacağından emin değilim . Ben de yaptım

brew services stop mongodb
brew services start mongodb

ve yeniden başlattıktan sonra tekrar başlamasını umuyordu. Ve gerçekten de oldu. Aslında, şimdi, ilk kurulumdan sonra yapılacak doğru şeyin

brew services start mongodb

ve bu, hizmeti yeniden başlattıktan sonra yeniden başlatmalı ve yeniden başlatmalıdır.



7

Komutunuz, bilgisayarınızın kök dizinini (eksik /olanı) değil, geçerli klasörde dizin yapısını oluşturmuş olacaktır .

İlk komut doğruydu, ancak /korumalı bir dizin olan bir klasör oluşturmaya çalıştığınız için sudo, "süper kullanıcı do" ifadesinin kısaltmasıyla önek eklemeniz gerekir . Daha sonra sizden şifreniz istenecektir.

Yani tam komut:

$ sudo mkdir -p /data/db

6

Sen oluşturmanız gerekir / veri / db olarak adlandırılan dizin olduğunu ... / veri / senin kök (yani / adlandırılan orada) ve alt klasör / db / ...

MacOS'ta kök dizinde bir direcotry oluşturmak için sudo kullanmanız gerektiğinden izin hataları alıyorsunuz , sudo komutları yönetici olarak çalıştırmanıza izin veriyor.

Bunun yerine bunu çalıştırın ...

$ sudo mkdir -p /data/db

Bu sizden bir parola isteyecektir, sistem ayarlarını değiştirmek için kullandığınız parolayla aynıdır (örnek için Sistem Tercihleri'ndeki şeyleri değiştirmeye çalıştığınızda açılan küçük iletişim kutusu) ve büyük olasılıkla oturum açmak için kullandığınız parolayla aynıdır.


6

Kök erişimine sahip olmadığınız bir dizin oluşturmaya çalışıyorsunuz.

Mongodb'u test etmek için, kullanıcı dizinimdeki gibi bir dizin kullanıyorum:

cd
mkdir -p temp/
mongod --dbpath .

Bu, geçici olarak / geçerli çalışma dizininizden bir mongo veritabanı oluşturur


6

Pencere yöneticim ile / data / db klasörleri oluşturarak aynı sorunu aştım. İlk başta terminal olsa yapmayı denedim ve kök dizinde bir klasör oluşturmak için sudo kullanmak zorunda kaldım.

Finder kullanarak kök dizine yeni gittim ve 'Yeni Klasör' kullanarak yeni bir klasör oluşturdum. Tamamen benim için çalıştı.

Not: OSX kullanıyorum.


5

Sadece hızlı bir not:

Önce izinleri değiştirmeden mongod'u çalıştırmayı denediyseniz, / data / db dizininde bir mongod.lock dosyası (ve diğer bazı dosyalar) olacaktır. / Data / db dizininin $ USER kullanıcısına erişim izni vermek için değiştirseniz bile, "Kilit dosyası oluşturulamıyor / açılamıyor: /data/db/mongod.lock errno: 13 İzin reddedildi " hata. Ls -al / data / db komutunu çalıştırdığınızda, tek tek dosyaların izinlerinin $ USER değerine değil, yine de kullanıcı için root olarak ayarlandığını göreceksiniz. Mongod.lock dosyasını ve diğerlerini de kaldırmalısınız. Sonra mongod yeniden çalıştırdığınızda, her şey çalışması ve ls -al yeniden çalıştırarak dosya izinlerinin dizin izinleriyle eşleştiğini doğrulayabilirsiniz.


bu iyi bir not. Bir kilit dosyam yoktu, ancak verilerimin ve db klasörünün sahibini değiştirmem gerekiyordu.
Caranicas

5

Kökte dizin oluştur

sudo mkdir -p /data/db

Şimdi Sahibini değiştirin

sudo chown -R $USER /data

Gitmek güzelsin!

mongod

kullanmak yerine, sudo mongodher seferinde şifre koymanız gerekmez, ancak kullanmanız gereken gerçek proje sudo mongodiçin normal kullanıcıya izin vermeyin!


4

Mongodb'u başlatmaya çalıştığımda aşağıdaki hatayı almaya devam ettim.

"shutting down with code:100" 

Aşağıdaki komutu kullanıyordum:

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

Benim için düzeltme "=" işareti gerek yoktu ve bu hataya neden oldu. Ben de yaptım

./mongod --dbpath ~/mongo-data

Sadece bunu atmak istedim çünkü hata hiçbir şekilde sorunun bu olduğunu belirtmiyor. Neredeyse yardımcı olup olmadığını görmek için ~ / mongo-data dizini içeriğini kaldırdım. Memnun oldum ki cli argüman bazen "=" işareti kullanmıyor.


3

Bu tarihe kadar mongod komutunu başlatmak için o / data / db klasörünü oluşturmamız gerektiğini düşünürdüm.

Ama son zamanlarda mongod'u hizmet komutuyla başlatmaya çalıştım ve benim için çalıştı ve / data / db dizini oluşturmaya gerek yoktu.

service mongod start

Mongod'un durumunu kontrol etmek için aşağıdaki komutu çalıştırabilirsiniz.

service mongod status

3

Bu çözüm sorunumu çözdü

  1. Şu şekilde bir dizin oluşturun:

    sudo mkdir -p / veri / db

  2. Bu, db olarak adlandırılan bir dizin yapar ve komutlarla başlamayı dener

    sudo mongod

Mongod'u başlatmayla ilgili başka bir hata veya sorunla karşılaşırsanız, sorunu şu şekilde bulabilirsiniz:

Dinleyici ayarlanamadı: SocketException: Adres zaten kullanılıyor.

ps ax | grep mongod
sudo kill ps_number

ve mongod koşu limanını bulup süreci öldür. Başka bir yol ise mongod'u başlatırken özel bir port yapmaktır.

sudo mongod --port 27018

2

Verebileceğiniz mevcut kullanıcı kimliklerini görmek için terminale "id" yazın, ardından şunu yazın

"sudo chown -R idname / data / db"

Bu benim için çalıştı! Umarım bu sorununuzu çözer.


2

MongoDB'nin daha güncel sürümlerinde, 3.2.10 var, varsayılan olarak saklanıyor

/var/lib/mongodb


1
koşu mongod --dbpath /var/lib/mongodbbu durumlarda yardımcı olur
santiago arizti

1

Araçlar paketini yeniden yükledikten sonra, Windows 10 cihazında benzer bir hata aldım;

initAndListen'de istisna: NonExistentPath: Veri dizini C: \ data \ db \ bulunamadı., sonlandırma

Çözüm Linux sistemleri için açıklandığı gibi analog: sadece klasörü mongod.exe(mongoDB sunucusu) başlatmak için yeterlidir.

Bunu, bir Windows cihazında aynı arama terimleriyle sonuçlanan insanlar için bırakabileceğimi düşündüm.


1

Sadece şunu denemek istedim ve eğer denerseniz ve karşılaşırsanız mkdir: /data/db: Read-only file system, lütfen bana yardımcı olan bu yoruma bakın: https://stackoverflow.com/a/58895373 .

Bu şekilde, herhangi biri bu yanıta sahipse ve "salt okunur" için F Kontrolünü yaparsa, bunu göreceklerdir


0

Öncülük ettiğim bu problemi yaratmanın gerçekten aptalca bir yolu var:

1) mongo kurulumunuzu bir süre bırakın 2) geri dönün ve sunucu çalışmıyor 3) başlatmaya çalışın, ancak sudo bu sefer kullanmayın 4) mongo veri bulamıyor / db / çünkü şimdi bakıyor su ana dizini yerine kullanıcı ana dizini

Evet, gerçekten aptal ama eğer sistemde olduğunuzdan beri bir süre geçtiyse sizi uyandırabilir.

Kısa cevap: Mongo'yu aynı zımni giriş diziniyle çalıştırdığınızdan emin olun

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.