MongoDB: wyjątek w initAndListen: 20 Podjęto próbę utworzenia pliku blokady w katalogu tylko do odczytu: / data / db, zakończenie

146

Utworzyłem /data/dbw katalogu głównym i uruchomiłem ./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
źródło
4
wygląda na problem z uprawnieniami. Czy użytkownik uruchamiający mongod ma uprawnienia do zapisu w katalogu / data / db? Podziel się wynikami, ls -ld /data/dba idmy możemy doradzić.
Bjorn Roche
drwxr-xr-x 2 root root 4096
whinytween 96
uid = 1000 (użytkownik) gid = 1000 (użytkownik) grupy = 1000 (użytkownik), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween 96
@BjornRoche dzięki za -ldudział :)
Skynet
@BjornRoche mój wynik jest drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbi nadal otrzymuję błąd. Jakieś pomysły?
Blake

Odpowiedzi:

278

Problem polega na tym, że katalog, który utworzyłeś, /data/dbnależy do i tylko użytkownik root, ale używasz mongod jako siebie. Istnieje kilka sposobów rozwiązania tego problemu, ale ostatecznie musisz nadać danemu katalogowi odpowiednie uprawnienia. Jeśli to jest do produkcji, radziłbym sprawdzić dokumentację i dokładnie to przemyśleć - prawdopodobnie chcesz zachować szczególną ostrożność.

Jeśli jednak to jest tylko do testowania i potrzebujesz tego do pracy i kontynuowania, możesz spróbować tego, co sprawi, że każdy będzie mógł zapisywać w katalogu:

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

lub to, co spowoduje, że katalog stanie się Twoją własnością:

> sudo chown -R $USER /data/db
Bjorn Roche
źródło
4
Myślę, że ktoś może potrzebować rekurencyjnej -Rzmiany wszystkich /data/dbplików w środku.
YongHao Hu
2
Dzięki za to. Próbowałem i nadal otrzymuję ten sam błąd
Samuel Dare
1
Ten temat jest już trochę stary, ale u mnie przy użyciu chmodwygenerował nowy błąd initAndListen : operation not permitted, ale chownzadziałał.
bachinblack
chown zrobił to również dla mnie
dwagnerkc
Przekazywanie 777 umask do katalogu jest złą praktyką. Możesz ustawić 755 i działachmod -R 755 /data/db
Juan-Kabbali
60

Na komputerze Mac musiałem wykonać następujące czynności:

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

ponieważ był tam również plik, do /tmpktórego Mongo również potrzebował dostępu

Santiago Martí Olbrich
źródło
2
Działa w Fedorze 28 Linux
Samuel Ivan
2
To powinno być na topie
Yashwanth Kambala
to zrobiło to również dla mnie.
Canovice
25

Jeśli twój system używa SELinux, upewnij się, że używasz odpowiedniego kontekstu dla utworzonego katalogu:

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

i sklonuj kontekst za pomocą:

chcon -R --reference=/var/lib/mongo /data/db
drrossum
źródło
1
Uratowałeś mi dzień! Dziękuję bardzo
Keerthivasan
2
ls -dZ / var / lib / mongodb / dla późniejszych wersji mongo
espeed
17

Doświadczyłem tego samego problemu i poniższe rozwiązanie rozwiązało ten problem. Powinieneś wypróbować następujące rozwiązanie.

sudo mkdir -p / data / db
sudo chown -R 'nazwa użytkownika' / data / db

Hamdi Bayhan
źródło
9

wprowadź opis obrazu tutajPrzede wszystkim zatrzymaj wszystkie usługi mongoDB , następnie utwórz katalog na /, czyli root, jeśli go nie masz, i usuń również plik portu. nadaj wszelkie uprawnienia do tego katalogu, zostań właścicielem tego katalogu, uruchom poniższe polecenie:

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

Teraz gotowe, po prostu uruchom usługę MongoDB, jeśli nie pomogło, spróbuj zmienić port na przykład:

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

Uwaga: dla mnie to wszystko działa i mam nadzieję, że zadziała dla ciebie, stary!

Kod
źródło
5

Napraw uprawnienia /data/db(lub /var/lib/mongodb):

sudo chown -R mongodb: /data/db

następnie zrestartuj MongoDB, np. używając

sudo systemctl restart mongod

Jeśli to nie pomoże, sprawdź komunikat o błędzie, jeśli używasz katalogu danych innego niż / var / lib / mongodb. W takim razie uruchom

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

źródło

plcosta
źródło
4

Ładne rozwiązania, ale zastanawiam się, dlaczego nikt nie podaje rozwiązania dla okien.

Jeśli używasz systemu Windows, wystarczy „Uruchomić jako administrator” cmd.

Enrique Benito Casado
źródło
6
Myślę, że dzieje się tak dlatego, że ludzie zazwyczaj nie uruchamiają serwerów baz danych w systemie Windows.
Blake
1
Ponadto, to zły pomysł, aby uruchomić bazę danych jako administrator / root, sprawdź inne komentarze tutaj, takie jak ten, aby uzyskać więcej informacji
Nino Filiu
4

Jeśli sprawdzasz logi mongodb i otrzymujesz taki błąd, po prostu wykonaj kroki tak jak ja. Występuje z powodu problemów z uprawnieniami w /data/dbkatalogu. Używam ubuntu16.04 i znajduję rozwiązanie z uruchomieniem dwóch prostych poleceń w następujący sposób.

Krok 1: Przyznaj uprawnienia do katalogu / data / db:

sudo chmod -R 0777 /data/db

Krok 2: Spróbuj uruchomić usługę mongod jako:

sudo service mongod start

Krok 3: Sprawdź stan usługi mongod:

sudo service mongod status
Jitendra
źródło
2
Krok 1 nada wszystkim użytkownikom uprawnienia do odczytu / zapisu / wykonywania. Nie należy tego używać.
Jonas Franz
Dzięki @JonasFranz za twoją opinię, więc w takim przypadku możemy użyć uprawnienia 0755 dla serwera produkcyjnego. Proszę, popraw mnie jeśli się mylę.
Jitendra
3

Jeśli nie potrzebujesz katalogów bazy danych w katalogu głównym, możesz utworzyć je data/dbw swoim katalogu domowym ( mkdir -p ~/data/db).

Następnie możesz uruchomić serwer MongoDB z --dbpathopcją:

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

(Zakładamy, że uruchamiasz go z terminala. Z jakiegoś dziwnego powodu mongodnie akceptuje ~ jako ścieżki katalogu domowego, stąd sztuczka podstawiania echa bash, równie dobrze możesz napisać/home/yourusername/data/db )

W rzeczywistości nie musi być ~/data/db, może być w dowolnym miejscu, dzięki czemu możesz mieć wiele ścieżek do bazy danych i ładnie wszystko organizować. Może nie być najlepszą opcją do produkcji (w zależności od tego, co chcesz zrobić), ale programowanie działa dobrze.

Kresimir
źródło
3

Zajmowałem się tym samym problemem:

Przejdź do katalogu MongoDB, który zawiera binkatalog, i uruchom:

sudo bin/mongod 

Uruchamiając MongoDB jako użytkownik root, możesz zostać poproszony o wprowadzenie hasła roota. Jeśli nadal nie możesz uruchomić MongoDB, sprawdź uprawnienia do katalogu danych MongoDB. Wchodzić:

ls -ld /data

lub wpisz ls -l /uprawnienia do wszystkich katalogów i plików w katalogu, w tym/data katalogu.

Tryb uprawnień dla użytkownika root powinien być ustawiony na " rwx", co oznacza, że ​​użytkownik root może czytać, zapisywać i wykonywać pliki. Aby to się stało, używamy:

chmod 755 /data 

755jest zapisem ósemkowym do ustawiania uprawnień do /datakatalogu na "rwxr-xr-x ”, co oznacza, że ​​użytkownik root może czytać, pisać i wykonywać, podczas gdy „grupa” i „wszyscy” mogą tylko czytać i wykonywać.

Uwaga: jeśli nie możesz tego zrobić, wpisz zamiast tego:

sudo chmod 755 /data   

ustawić uprawnienia jako użytkownik root.

Następnie, po wykonaniu tego kroku, ponownie przechwyć tryby uprawnień, używając:

ls -ld /data

który powinien wyglądać następująco:

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

Nie musisz martwić się o „ d” na początku i zauważ, że uprawnienia odzwierciedlają „rwxr-xr-x ”.

Możesz teraz wrócić do katalogu MongoDB i wpisać:

sudo bin/mongod  

uruchomić MongoDB.

yifan li
źródło
2
Zły pomysł, NIGDY nie uruchamiaj go jako sudo. Istnieją lepsze rozwiązania, które zarządzają użytkownikiem / grupą mongod lub mongodb w zależności od twojej dystrybucji. Nie używaj tego rozwiązania.
Andy
2

wystarczy uruchomić polecenie jako superużytkownik:

po prostu wpisz z terminala: sudo su mongod

David Noleto
źródło
1
Uruchamianie takich programów jako superużytkownik jest zawsze złym pomysłem. Lepiej naprawić uprawnienia do folderów
Jason
2

Jeśli pracujesz w systemie Windows i próbujesz skonfigurować MongoDB, uruchom cmd, ponieważ Admnistrator jest rozwiązaniem, jak zasugerował Enrique powyżej, zobacz to tutaj

Adewale Olaoye
źródło
-1

To zadziałało dla mnie w Ubuntu LTS 20.04:

$ sudo service mongod start
sagar kumar
źródło
1
Wyjaśnij, dlaczego uważasz, że to zadziała również dla innych!
sauhardnc
1
Opisz rozwiązanie bardziej szczegółowo, podając więcej informacji, takich jak wyjaśnienie rzeczywistego powodu, dodanie działającego fragmentu kodu i czynności, które należy wykonać, aby wyeliminować problemy. Aby uzyskać więcej informacji, odwiedź wytyczne StackOverflow.
Kapil Raghuwanshi