MongoDB: eccezione in initAndListen: 20 Tentativo di creare un file di blocco in una directory di sola lettura: / data / db, terminando


146

Ho creato /data/dbnella directory principale ed eseguito ./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
sembra un problema di autorizzazioni. L'utente che esegue mongod è autorizzato a scrivere nella directory / data / db? Condividi l'output di ls -ld /data/dbe idcosì possiamo consigliarti.
Bjorn Roche,

drwxr-xr-x 2 radice radice 4096
whinytween96

uid = 1000 (utente) gid = 1000 (utente) gruppi = 1000 (utente), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (
sambashare

@BjornRoche grazie per la -ldparte :)
Skynet,

@BjornRoche il mio output è drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbe sto ancora ricevendo l'errore. Qualche idea?
Blake,

Risposte:


278

Il problema è che la directory che hai creato, /data/db è di proprietà e scrivibile solo dall'utente root, ma stai eseguendo mongod come te stesso. Esistono diversi modi per risolverlo, ma alla fine è necessario assegnare alla directory in questione le autorizzazioni giuste. Se questo è per la produzione, ti consiglierei di controllare i documenti e di pensarci attentamente - probabilmente vorrai prestare particolare attenzione.

Tuttavia, se questo è solo per il test e hai solo bisogno di questo per funzionare e andare avanti con esso, potresti provare questo, il che renderà la directory scrivibile da tutti:

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

o questo, che renderà la directory di tua proprietà:

> sudo chown -R $USER /data/db

4
Penso che qualcuno potrebbe aver bisogno -Rdi cambiare tutti i /data/dbfile all'interno ricorsivamente.
YongHao Hu,

2
Grazie per questo. Provato e ottenendo ancora lo stesso errore
Samuel Dare

1
Questo argomento è già un po 'vecchio, ma per me, usando chmodgenerato un nuovo errore initAndListen : operation not permitted, ma ha chownfunzionato.
bachinblack,

chown l'ha fatto anche per me
dwagnerkc il

È una cattiva pratica assegnare 777 umask a una directory. Puoi impostare 755 e funzionachmod -R 755 /data/db
Juan-Kabbali il


25

Se il tuo sistema utilizza SELinux, assicurati di utilizzare il contesto giusto per la directory che hai creato:

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

e clonare il contesto con:

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

1
Mi hai salvato la giornata! Grazie mille
Keerthivasan,

2
ls -dZ / var / lib / mongodb / per le versioni successive di mongo
espeed

17

Ho riscontrato lo stesso problema e la seguente soluzione ha risolto questo problema. Dovresti provare la seguente soluzione.

sudo mkdir -p / data / db
sudo chown -R 'nome utente' / data / db


9

inserisci qui la descrizione dell'immaginePrima di tutto arrestare tutti i servizi mongoDB , quindi creare una directory su /, significa root, se non si dispone, e rimuovere anche il file di porta. concedere tutte le autorizzazioni a quella directory, diventare quel proprietario di directory, eseguire il comando seguente:

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

Ora hai finito, basta avviare il servizio MongoDB, se non ha aiutato, prova a cambiare la porta come:

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

Nota: per me tutta questa roba funziona e spero che funzioni per te, ragazzo!


5

Correggi le autorizzazioni di /data/db(o /var/lib/mongodb):

sudo chown -R mongodb: /data/db

quindi riavviare MongoDB, ad es. utilizzando

sudo systemctl restart mongod

Se ciò non aiuta, controlla il tuo messaggio di errore se stai usando una directory di dati diversa da / var / lib / mongodb. In tal caso, esegui

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

fonte


4

Belle soluzioni, ma mi chiedo perché nessuno stia dando la soluzione per Windows.

Se stai usando Windows devi solo "Esegui come amministratore" il cmd.


6
Penso che sia perché le persone in genere non eseguono server di database su Windows.
Blake,

1
Inoltre, è una cattiva idea eseguire un database come amministratore / root, controlla altri commenti qui come questo per maggiori dettagli
Nino Filiu,

4

Se stai controllando i tuoi log di mongodb e stai ricevendo un tale errore, segui semplicemente i passaggi che ho fatto. Si verifica a causa di problemi di autorizzazione con la tua /data/dbdirectory. Sto usando Ubuntu16.04 e trovo la soluzione con l'esecuzione di due semplici comandi come segue.

Passaggio 1: concedere l'autorizzazione alla directory / data / db:

sudo chmod -R 0777 /data/db

Passaggio 2: provare ad avviare il servizio mongod come:

sudo service mongod start

Passaggio 3: controllare lo stato del servizio mongod:

sudo service mongod status

2
Il passaggio 1 concederà autorizzazioni di lettura / scrittura / esecuzione a tutti gli utenti. Questo non dovrebbe essere usato.
Jonas Franz,

Grazie, @JonasFranz, per il tuo feedback, quindi in quel caso, possiamo usare l'autorizzazione 0755 per il server di produzione. Perfavore, correggimi se sbaglio.
Jitendra,

3

Se non è necessario disporre delle directory del database in root, è possibile creare data/dbnella directory home (mkdir -p ~/data/db ).

Quindi è possibile avviare il server MongoDB con l' --dbpathopzione:

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

(Questo presuppone che tu lo stia avviando da un terminale. Per qualche strana ragione, mongodnon accetta ~ come percorso della directory home, quindi il trucco di sostituzione dell'eco bash, potresti anche scrivere/home/yourusername/data/db )

In realtà, non deve essere ~/data/db, può essere ovunque tu voglia e in questo modo puoi avere più percorsi di database e organizzare tutto in modo piacevole. Potrebbe non essere l'opzione migliore per la produzione (a seconda di ciò che si desidera fare), ma per lo sviluppo funziona bene.


3

Ho affrontato lo stesso problema:

Passare alla directory MongoDB che contiene la bindirectory ed eseguire:

sudo bin/mongod 

Eseguendo MongoDB come utente root potrebbe esserti chiesto di inserire la password di root. Se non è ancora possibile eseguire MongoDB, controllare le autorizzazioni per la directory dei dati di MongoDB. Accedere:

ls -ld /data

o digitare ls -l /le autorizzazioni per tutte le directory e i file nella directory, incluso il file/data directory.

La modalità di autorizzazione per l'utente root dovrebbe essere " rwx", il che significa che l'utente root è in grado di leggere, scrivere ed eseguire i file. A tal fine, utilizziamo:

chmod 755 /data 

755è una notazione ottale per impostare le autorizzazioni, della /datadirectory su " rwxr-xr-x", il che significa che l'utente root può leggere, scrivere ed eseguire, mentre il "gruppo" e "tutti" sono in grado di leggere ed eseguire solo.

Nota: quando non puoi farlo, digita invece:

sudo chmod 755 /data   

per impostare l'autorizzazione come utente root.

Quindi, al termine di tale passaggio, riacquistare le modalità di autorizzazione utilizzando:

ls -ld /data

che dovrebbe apparire come:

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

Non devi preoccuparti del " d" all'inizio e notare che le autorizzazioni riflettono "rwxr-xr-x ".

Ora puoi tornare alla directory MongoDB e digitare:

sudo bin/mongod  

per eseguire MongoDB.


2
Pessima idea, MAI eseguirlo come sudo. Esistono soluzioni migliori che gestiscono l'utente / gruppo su mongod o mongodb a seconda della distribuzione. Non utilizzare questa soluzione.
Andy,

2

devi solo eseguire il comando come superutente:

basta digitare dal terminale: sudo su mongod


1
È sempre una cattiva idea eseguire programmi come questo come un superutente. È meglio correggere i permessi delle cartelle
Jason

2

Se sei su Windows e stai cercando di installare MongoDB, esegui cmd come Admnistrator è la strada da seguire come suggerito da Enrique sopra, guardalo qui


-1

Questo ha funzionato per me in Ubuntu LTS 20.04:

$ sudo service mongod start

1
Spiega, perché pensi che funzionerà anche per gli altri!
sauhardnc

1
Descrivi la risoluzione in modo più dettagliato con ulteriori approfondimenti come spiegare il motivo effettivo, aggiungere lo snippet di codice funzionante e i passaggi da eseguire per eliminare i problemi. Per maggiori dettagli, consultare le linee guida StackOverflow.
Kapil Raghuwanshi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.