Mongod si lamenta che non esiste una cartella / data / db


475

Oggi sto usando il mio nuovo mac per la prima volta. Sto seguendo la guida introduttiva su mongodb.org fino al passaggio in cui si crea la directory / data / db. a proposito, ho usato il percorso homebrew.

Quindi apro un terminale e penso di trovarmi in quella che hai chiamato Home Directory, perché quando faccio "ls", vedo cartelle di applicazioni desktop, film, immagini, musica, documenti e librerie.

Quindi ho fatto un

mkdir -p /data/db

per prima cosa dice che è stato negato il permesso. Ho continuato a provare cose diverse per mezz'ora e infine:

mkdir -p data/db

lavorato. e quando "ls", esiste una directory di dati e annidata in essa una cartella db.

poi accendo mongod e si lamenta di non trovare dati / db

Ho fatto qualcosa di sbagliato?

Ora ho fatto il

sudo mkdir -p /data/db

e quando faccio una "ls" vedo la directory dei dati e la directory db. all'interno della directory db, però, non c'è assolutamente nulla e quando corro mongod

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

MODIFICA Messaggio di errore per

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

Grazie a tutti!


1
"Argomento non valido" significa che il nome simbolico per l'utente di mongo è diverso sul tuo sistema - probabilmente stai usando un pacchetto diverso o un meccanismo di installazione per installare MongoDB. Dovresti controllare i tuoi file / etc / passwd e / etc / group per il nome simbolico (o uid / gid) dell'utente mongo grep mongo /etc/passwd /etc/group. Se non funziona, controlla il nome controllando il proprietario della directory ls -ld /var/lib/mongo. O per vedere l'uid / gid fare questo: ls -lnd /var/lib/mongo. Nel mio caso drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ...- questo significa usare 487: 480 come parametro
Tilo il

usare l'UID / GID è sinonimo di usare il nome simbolico. es. basta sostituire 'mongod: mongod con i numeri uid / gid che hai trovato con il metodo sopra ..
Tilo

Ora che sappiamo come aggiungere correttamente questa directory (data / db), perché questa directory non è stata inclusa nell'installazione?
Linux,

Se hai appena effettuato l'aggiornamento a MacOS 10.15, questa risposta potrebbe essere di aiuto: stackoverflow.com/questions/58283257/…
Adam Zerner,

se hai l'ultima versione di MAC: Con il nuovo aggiornamento di macOS Catalina, la cartella "/ data / db" diventa di sola lettura, non puoi modificarla. Seguire questa procedura per creare un DB in un'altra cartella: 1) Cambia directory mongod: sudo mongod --dbpath / System / Volumes / Data / data / db 2) Dagli un alias: alias mongod = "sudo mongod --dbpath / System / Volumes / Data / data / db "
Farbod Aprin

Risposte:


636

Hai creato la directory nel posto sbagliato

/ data / db significa che si trova direttamente nella directory '/' root, mentre hai creato 'data / db' (senza il comando /) probabilmente all'interno di un'altra directory, come l'homeedirectory '/ root'.

Devi creare questa directory come root

O è necessario utilizzare sudo, ad essudo mkdir -p /data/db

Oppure devi fare su -per diventare superutente e quindi creare la directory conmkdir -p /data/db


Nota:

MongoDB ha anche un'opzione in cui è possibile creare la directory di dati in un'altra posizione, ma in genere non è una buona idea, perché complica leggermente cose come il recupero del DB, perché è sempre necessario specificare manualmente il percorso db. Non consiglierei di farlo.


Modificare:

il messaggio di errore visualizzato è "Impossibile creare / aprire il file di blocco: /data/db/mongod.lock errno: 13 Autorizzazione negata" . La directory che hai creato non sembra avere le autorizzazioni e la proprietà corrette, ma deve essere scrivibile dall'utente che esegue il processo MongoDB.

Per vedere le autorizzazioni e la proprietà della directory '/ data / db /', procedere come segue: (ecco come dovrebbero apparire le autorizzazioni e la proprietà)

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

Il lato sinistro 'drwxr-xr-x' mostra le autorizzazioni per Utente, Gruppo e Altri. 'mongod mongod' mostra chi possiede la directory e a quale gruppo appartiene quella directory. Entrambi sono chiamati "mongod" in questo caso.

Se la tua directory '/ data / db' non ha i permessi e la proprietà sopra, fai questo :

Per prima cosa controlla quale utente e gruppo ha l'utente mongo:

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

Dovresti avere una voce per mongod in / etc / passwd, dato che è un demone.

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

Puoi anche usare il nome utente e il nome gruppo, come segue: (possono essere trovati in / etc / passwd e / etc / group)

sudo chown -R mongod:mongod /data/db 

che dovrebbe farlo funzionare ..

Nei commenti seguenti, alcune persone lo hanno usato:

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

o

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

Lo svantaggio è che $ USER è un account che ha una shell di accesso. Idealmente i demoni non dovrebbero avere una shell per motivi di sicurezza, ecco perché vedi / bin / false nel grep del file delle password sopra.

Controlla qui per comprendere meglio il significato delle autorizzazioni della directory:

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

Magari dai un'occhiata anche a uno dei tutorial che puoi trovare su Google: "UNIX per principianti"


2
prova a fare ls -ld /data/ e ls -ld /data/db/.. vedrai le autorizzazioni della directory elencate sul lato sinistro, quindi la proprietà, quindi il nome della directory. dovresti assicurarti che le directory siano scrivibili dall'ID utente che esegue MongoDB.

2
@Tilo Sì, li ho fatti. Il primo, il chmod è andato bene, il secondo dice "chown: mongod: argomento non valido"
Nik So

3
Questo è l'intero thread è esattamente quello che sto attraversando. Ma non riesco nemmeno a capire quale sia l'id utente e l'id gruppo di mongo sul mio sistema né trovare alcuna documentazione su di esso da nessuna parte. Sono bloccato al chong mongod: mongod parte mentre sta tornando uninvalid arguement
Trip

10
Aggiornamento sono andato con sudo touch /data/db/mongod.locke sudo chmod 0777 /data/db/mongd.lock. Ha iniziato subito.
Viaggio

141
Correre sudo chown -R `id -u` /data/dbo sudo chown -R $USER /data/dbinvece di sudo chown mongod:mongod /data/dbfare il trucco per me
heitortsergent

117

Dopo aver ricevuto lo stesso errore di Nik

chown: id -u: argomento non valido

Ho scoperto che apparentemente si è verificato utilizzando il tipo sbagliato di virgolette (avrebbe dovuto essere un backquotes ) nei forum di Ubuntu

Invece ho appena usato

sudo chown $ USER / data / db

in alternativa e ora mongod ha i permessi di cui ha bisogno.


4
Se qualcuno lo trova utile: ho avuto lo stesso problema, ma il messaggio di errore era un po 'diverso (diceva che il gruppo' mongod 'non esiste quando ho provato chown mongod: mongod) -> tuttavia, usando chown $ USER ha funzionato per io, grazie ...
trainoasi,

6
Ho dovuto aggiungere una -R a questo. "sudo chown -R $ USER / data / db"
Kevin,

1
Risposta perfetta per i neofiti,
Pyae Sone,

90

Questo funziona per me, trovato nei commenti:

sudo chown -R $USER /data/db

2
Anche per me L'installazione di mongo tramite homebrew sul mio OSX non aggiunge un utente e un gruppo mongod.
Zauker,

73

Crea la cartella.

sudo mkdir -p /data/db/

Concediti l'autorizzazione per la cartella.

sudo chown `id -u` /data/db

Quindi puoi correre mongodsenza sudo. Funziona su OSX Yosemite


1
Invece di creare una nuova directory prova a riavviare il servizio mongod. Ad esempio: - riavvio del servizio mongod
Devendra Bhat,

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

32

Per correggere l'errore su OS X, ho riavviato e arrestato il servizio: $ brew services restart mongodb $ brew services stop mongodb

Poi ho corso mongod --config /usr/local/etc/mongod.confe il problema era sparito.

L'errore sembrava insorgere dopo aver aggiornato il pacchetto homebrew mongodb.


23

Installazione tramite brew su Mac in cui YOUR_USER_NAME e lo staff sono il gruppo

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 Grazie per quello. è una di quelle cose che sembravano strane ma hanno funzionato. quindi chi dovrebbe essere il proprietario e il gruppo di quel file?
Gal Bracha,

Dipende dalla tua distribuzione. Dai un'occhiata al /etc/passwdnome utente: è probabile che il gruppo sia identico. Di solito è mongoo mongodb.
Markus W Mahlberg,

@MarkusWMahlberg ok - l'ho risolto ora - durante l'installazione tramite brew non crea l'utente e il gruppo, quindi l'ho impostato sul mio nome utente. vedi se è più sicuro ora. grazie
Gal Bracha il

Grazie. Quando si sviluppa su Mac con brew, questo risolve il problema. Non è necessaria maggiore sicurezza se si utilizzano solo i dati di test in mongodb. @MarkusWMahlberg su OS X, l'utente che esegue mongod è YOUR_USER_NAME se lo avvii semplicemente con "mongod &".
Gaspard,

22

Se esegui mongo senza argomenti, si presume che tu sia in esecuzione sulla macchina di produzione, quindi utilizza le posizioni predefinite.

per usare il tuo database (dev o solo uno diverso):

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

Questo spiega perché non utilizzerà le impostazioni dichiarate in /etc/mongod.conf? Ha avuto problemi con un'installazione di 3.6.5 su Ubuntu 16.04.
Dark Star1

prova ad avviarlo in modalità verbose (-v) o forza esplicita la configurazione (--config): docs.mongodb.com/manual/reference/program/mongod Se installi usando apt-get, avvialo con il servizio mongod status / start / stop
loreii,

Ho esaminato i registri di mongo. Tutto ciò continuava a dire che la mancanza della directory / data / db impediva l'avvio. Alla fine hai trovato la tua risposta e questa sembra essere la ragione dei problemi?
Dark Star1

Questo funziona anche quando si utilizza MongoDB nel sottosistema Linux su Windows, dove non è possibile creare / data / db nella radice di fs.
hiergiltdiestfu,

8

Ho avuto questo problema con una configurazione Mongodb esistente. Non sono ancora sicuro del perché sia ​​successo, ma per qualche motivo il processo Mongod non è riuscito a trovare il file mongod.config. Poiché non è stato possibile trovare il file di configurazione, ha tentato di trovare i file DB in / data / db, una cartella che non esisteva. Tuttavia, il file di configurazione era ancora disponibile, quindi mi sono assicurato che il processo disponga delle autorizzazioni per il file di configurazione ed eseguo il processo mongod con il flag --config come segue:

mongod --config /etc/mongod.conf

Nel file di configurazione stesso avevo questa impostazione:

storage:
  dbPath: /var/lib/mongodb

Ed è così che il processo potrebbe ritrovare la cartella DB reale.


1
Confermo che mi è successo. Invece del file di configurazione, possiamo semplicemente impostare --dbpath = / var / lib / mongodb. Pensavo di aver perso tutti i miei dati ma è ancora lì.
lenhhoxung,

8

L'ho fatto

brew install mongodb

il 01-02-2018 e questo mi ha dato la mongodbversione 3.6.2.

Spinto dalla risposta di orluke sopra, ho provato solo

$ brew services restart mongodb

e tutto è nato nella vita. La mia mongoose.createConnection()chiamata ha fatto quello che volevo. La GUI MongoDB Compass , la versione della community, si connetterà. Ho usato Compass per guardare la local.startup_logcollezione. Contiene un documento, il registro di me che ha appena avviato il servizio mongoDB e che ha avuto

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

e in effetti c'era un tale file:

$ 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

e c'era una /usr/local/var/mongodbdirectory con molti file oscuri. Quindi sembra che l'installazione funzioni ora.

Non sono sicuro se brew services restartimposta il servizio per eseguire l'accesso. Così ho fatto

brew services stop mongodb
brew services start mongodb

e speravo che lo riavviasse dopo il riavvio. E, in effetti, lo ha fatto. In effetti, ora, penso che la cosa giusta da fare dopo l'installazione iniziale sia

brew services start mongodb

e questo dovrebbe avviare il servizio e riavviarlo dopo il riavvio.



7

Il tuo comando avrà creato la struttura di directory nella cartella corrente, non la directory principale del tuo computer (che è ciò che manca /).

Il primo comando era giusto, ma poiché stai provando a creare una cartella /, che è una directory protetta, devi aggiungere il prefisso sudo, che è l'abbreviazione di "superutente do". Ti verrà quindi richiesta la password.

Quindi il comando completo sarebbe:

$ sudo mkdir -p /data/db

6

Devi creare / data / db ... che è una directory chiamata / data / nella tua radice (ie / ) e una sottocartella lì chiamata / db / ...

Stai ricevendo errori di autorizzazione poiché devi usare sudo per creare una directory nella directory principale in MacOS, sudo ti consente di eseguire comandi come amministratore.

Quindi, esegui questo invece ...

$ sudo mkdir -p /data/db

Questo ti chiederà una password, è la stessa password che usi per cambiare le impostazioni di sistema (quella piccola finestra di dialogo che si apre quando provi a cambiare le cose nelle Preferenze di Sistema per l'ecample), e probabilmente la stessa che usi per accedere.


6

Stai tentando di creare una directory a cui non hai accesso root.

Per testare mongodb, uso solo una directory dalla mia directory utente come:

cd
mkdir -p temp/
mongod --dbpath .

Questo renderà un database mongo in temp / dalla tua directory di lavoro corrente


6

Ho superato lo stesso identico problema creando le cartelle / data / db con il mio gestore di finestre. All'inizio ho provato a farlo attraverso il terminale, e per creare una cartella nella directory principale, ho dovuto usare sudo.

Sono appena andato nella directory principale usando Finder e ho creato una nuova cartella usando "Nuova cartella". Ha funzionato totalmente per me.

Nota: sto usando OSX.


5

Solo una breve nota:

Se hai provato a eseguire mongod senza prima modificare le autorizzazioni, probabilmente avrai un file mongod.lock (e alcuni altri file) nella directory / data / db. Anche dopo aver modificato le autorizzazioni per la directory / data / db per dare accesso al tuo $ USER, continuerai a ricevere il messaggio "Impossibile creare / aprire il file di blocco: /data/db/mongod.lock errno: 13 Autorizzazione negata "errore. Esegui ls -al / data / db e probabilmente vedrai che le autorizzazioni per i singoli file sono ancora impostate su root per l'utente, non sul tuo $ USER. È necessario rimuovere il file mongod.lock e anche gli altri. Quindi quando esegui di nuovo mongod, tutto dovrebbe funzionare e puoi verificare che le autorizzazioni del file corrispondano alle autorizzazioni della directory eseguendo di nuovo ls -al.


questa è una buona nota Non avevo un file di blocco, ma avevo bisogno di cambiare il proprietario dei miei dati e la cartella db.
Caranicas,

5

Crea directory nella radice

sudo mkdir -p /data/db

Ora cambia il proprietario

sudo chown -R $USER /data

Sei a posto!

mongod

invece di usare sudo mongod, non è necessario inserire la password di tutti i tempi, ma per il progetto reale che dovresti usare sudo mongod, non dare il permesso all'utente normale!


4

Continuavo a ricevere il seguente errore quando ho provato ad avviare mongodb.

"shutting down with code:100" 

Stavo usando il seguente comando:

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

La soluzione per me era che non avevo bisogno del segno "=" e questo stava causando l'errore. Così ho fatto

./mongod --dbpath ~/mongo-data

Volevo solo buttarlo lì perché l'errore non specifica in alcun modo che questo è il problema. Ho quasi rimosso il contenuto della directory ~ / mongo-data per vedere se questo ha aiutato. Sono contento di aver ricordato che a volte gli arg di cli non usano il segno "=".


3

Fino ad oggi pensavo anche che avremmo bisogno di creare quella cartella / data / db per avviare il comando mongod.

Ma recentemente ho provato ad avviare mongod con il comando di servizio e ha funzionato per me e non è stato necessario creare la directory / data / db.

service mongod start

Per controllare lo stato di mongod è possibile eseguire il comando seguente.

service mongod status

3

Questa soluzione risolve il mio problema

  1. Crea una directory come

    sudo mkdir -p / data / db

  2. Ciò renderà una directory denominata db e quindi tenterà di iniziare con i comandi

    sudo mongod

Se ricevi un altro errore o problema con l'avvio di mongod, potresti riscontrare un problema come

Impossibile impostare il listener: SocketException: indirizzo già in uso Se si riscontra un errore diverso da quello che è necessario interrompere il processo in esecuzione di mongod digitando to terminal as

ps ax | grep mongod
sudo kill ps_number

e trova la porta in esecuzione di mongod e termina il processo. Un altro modo è quello di creare una porta specifica all'avvio di mongod come

sudo mongod --port 27018

2

Digita "id" sul terminale per vedere gli ID utente disponibili che puoi fornire, quindi digita semplicemente

"sudo chown -R idname / data / db"

Questo ha funzionato per me! Spero che questo risolva il tuo problema.


2

Nelle versioni più attuali di MongoDB, ho 3.2.10, è memorizzato per impostazione predefinita in

/var/lib/mongodb


1
la corsa mongod --dbpath /var/lib/mongodbaiuta in queste circostanze
santiago arizti,

1

Dopo aver (reinstallato) il pacchetto di strumenti, ho riscontrato un errore simile su un dispositivo Windows 10;

eccezione in initAndListen: NonExistentPath: directory dati C: \ data \ db \ non trovata., terminata

Soluzione Analogica a come spiegato per i sistemi linux: è sufficiente creare la cartella per poter avviare il mongod.exe(server mongoDB).

Ho pensato di lasciarlo per le persone che finiscono qui con gli stessi termini di ricerca su un dispositivo Windows.


1

Volevo solo sottolineare qui che se provi questo e ti imbatti mkdir: /data/db: Read-only file system, per favore vedi questo commento, che mi ha aiutato: https://stackoverflow.com/a/58895373 .

In questo modo se qualcuno è su questa risposta e fa Control F per "sola lettura" vedranno questo


0

C'è un modo davvero stupido per creare questo problema, che ho sperimentato:

1) lascia il tuo mongo install per un po '2) torna e il server non è in esecuzione 3) prova ad avviarlo, ma non usare sudo questa volta 4) mongo non riesce a trovare i dati / db / perché ora sta cercando in la home home dell'utente invece di su home dir

Sì, è davvero stupido ma se è passato un po 'di tempo da quando eri sul sistema può farti inciampare.

Risposta breve: assicurati di eseguire mongo con la stessa directory home implicita

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.