Come posso sapere dove mongoDB sta memorizzando i dati? (non è nel valore predefinito / data / db!)


160

Il mio host è arrivato con un'istanza di mongodb e non esiste una directory / db, quindi ora mi chiedo cosa posso fare per scoprire dove vengono effettivamente archiviati i dati.


7
C'è una domanda più recente su questo che ha una risposta migliore: "Qual è il percorso del database predefinito per mongodb?" . Il percorso dei dati sarà predefinito /data/db(se non viene utilizzato alcun file di configurazione) o rilevabile tramite db.adminCommand("getCmdLineOpts").parsed.dbpath.
Stennie,

6
su OSX, mongo 3.0.4, ho dovuto usare "db.adminCommand (" getCmdLineOpts "). parsed.storage.dbPath"
ski_squaw

@Stennie il tuo commento mi ha aiutato (sono su Windows, quindi sto usando Robomongo), ma il tuo link di domande punta a questa domanda, non al tuo obiettivo previsto - stackoverflow.com/a/12738557/112764 - e in 3.x, in realtà èdb.adminCommand("getCmdLineOpts").parsed.storage.dbpath
NateJ

5
@NateJ Grazie! La risposta alla domanda correlata contiene esempi di MongoDB 2.6+ e la forma precedente in <= 2.4. C'è anche un helper di shell che puoi usare invece di ricordare di cambiare al admindatabase o usando adminCommand: db.serverCmdLineOpts().parsed.storage.dbPath(MongoDB 2.6+).
Stennie,

Risposte:


140

mongodil percorso predefinito del database è /data/db/.

Se corri ps -xa | grep mongode non vedi un --dbpathche dice esplicitamente mongoddi guardare quel parametro per la posizione del db e non hai un dbpathnel tuo mongodb.conf, allora la posizione predefinita sarà: /data/db/e dovresti guardare lì.


11
Nessuna directory di questo tipo
user2384994

18
@ user2384994 il mio si trovava a/etc/mongod.conf
K - La tossicità in SO sta crescendo.

1
Non ho visto il percorso, ma /usr/bin/mongod -f /etc/mongod.conf. Preso il dbpatch dalla configurazione.
Putnik,

6
Controllare /usr/local/etc/mongod.conf(file di configurazione) e /usr/local/var/mongodb(posizione del database). Su alcuni sistemi, questi saranno i valori predefiniti.
Miles Erickson,

Bene, questo DOVREBBE stampare il percorso corrente proprio per tutte le versioni di mongodb stackoverflow.com/a/52036070/248616
Nam G VU,

57

Cosa dice il tuo file di configurazione?

$ grep dbpath /etc/mongodb.conf

Se non è corretto, provare questo, i file del database saranno presenti nell'elenco:

$ sudo lsof -p `ps aux | grep mongodb | head -n1 | tr -s ' ' | cut -d' ' -f 2` | grep REG

È /var/lib/mongodb/*sulla mia installazione predefinita (Ubuntu 11.04).

Si noti che esiste anche un /var/lib/mongodb/mongod.lockfile che contiene mongodPID per comodità, tuttavia si trova nella directory dei dati - che stiamo cercando ...


Nessuna directory / var / lib su questo server e quei due comandi non funzionano (il primo non riesce a trovare /etc/mongodb.conf il secondo lsof non riconosciuto)
Zugwalt

Forse dovresti aggiungere informazioni per il tuo host. Non sembra essere una distribuzione come Ubuntu.
DrColossos,

4
Su Ubuntu 16.04 mongodb v3.4.10, è$ grep dbPath /etc/mongod.conf
ihsan il

31

Nella versione più recente di mongodb v2.6.4 prova:

grep dbpath /etc/mongod.conf

Ti darà qualcosa del genere:

dbpath=/var/lib/mongodb

Ed è qui che memorizza i dati.


Anche il mio era qui. Per le persone che volessero trovare questa directory per verificare le dimensioni dei file:du -sh * | sort -hr

26

Trovo db.serverCmdLineOpts()il modo più efficace per trovare il percorso effettivo se è possibile connettersi al server. "Parsed.storage.dbPath" contiene il percorso attualmente utilizzato dal server ed è disponibile sia quando viene prelevato dalla configurazione che dagli argomenti della riga di comando.

Anche nel mio caso era importante assicurarsi che il valore di configurazione riflettesse il valore effettivo (cioè che la configurazione non fosse cambiata dopo l'ultimo riavvio), che non è garantito dalle soluzioni qui offerte.

db.serverCmdLineOpts()

Esempio di output:

{
    "argv" : [ 
        // --
    ],
    "parsed" : {
        "config" : "/your-config",
        "storage" : {
            "dbPath" : "/your/actual/db/path",
            // --
        }
    },
    "ok" : 1.0
}

3
Questa è la risposta migliore qui
Sovrintendente

La migliore risposta anche per me
Nam G VU,

Ha funzionato come un fascino! Grazie e questo dovrebbe essere votato :)
Bryan Jacob

21

Mentre questa domanda è indirizzata alle istanze di Mongo Linux / Unix, è uno dei primi risultati di ricerca indipendentemente dal sistema operativo utilizzato, quindi per i futuri utenti Windows che lo trovano:

Se MongoDB è impostato come un servizio Windows nel modo predefinito, di solito puoi trovarlo guardando la voce 'Percorso verso eseguibile' nelle proprietà del servizio MongoDB:

Finestra delle proprietà che mostra l'opzione 'Percorso per eseguibile'


Non è così ovvio, ma le domande sono per * nix os
st78,

3
@ st78 Lo so, ma è ancora uno dei primi risultati di Google durante la ricerca della posizione in Windows, motivo per cui ho lasciato una risposta indirizzando il percorso di Windows (una volta che l'ho capito) per le persone come me che si imbattono in esso.
Robotnik,

15

Dalla mia esperienza, la posizione predefinita è /var/lib/mongodbdopo averlo fatto

sudo apt-get install -y mongodb-org

1
Posso confermarlo per gli utenti di Linux Mint 17.3.
Matheus Dal'Pizzol,

8

Ho trovato il mio qui su un sistema OSX / usr / local / var / mongodb


3
Questo è vero per gli utenti di Homebrew
Matteo,

1
La domanda è "Come posso trovare" la posizione di archiviazione dei dati di mongodb. non solo il percorso per un utente o una piattaforma specifici.
Yu Chen,

4

Per windows Vai nella cartella MongoDB \ Server \ 4.0 \ bin e apri il file mongod.cfg in qualsiasi editor di testo. Quindi individuare la riga che specifica il parametro dbPath. La linea sembra qualcosa di simile

dbPath: D: \ Programmi \ MongoDB \ Server \ 4.0 \ data


2

L'ho trovato solo curiosando /var/db. Grazie per l'aiuto, sono sicuro che queste risposte si applicano ad altri sistemi (ad esempio Ubuntu) e aiuteranno gli altri!


2

Se potessi in qualche modo individuare mongod.log e fare un grep su di esso

grep dbpath mongod.log

Il valore per dbpath è l'ubicazione dei dati per mongodb !! Ti auguro il meglio :)


2

In realtà, la directory predefinita in cui l'istanza mongod memorizza i suoi dati è

/data/db su Linux e OS X,

\data\db Su Windows

Se MongoDB è stato installato utilizzando un sistema di gestione dei pacchetti , controllare il /etc/mongod.conffile fornito dai pacchetti per vedere la directory specificata.

L' storage.dbPathimpostazione è disponibile solo per mongod.

Gli script init del pacchetto Linux non si aspettano storage.dbPathdi cambiare rispetto ai valori predefiniti. Se usi i pacchetti Linux e cambi storage.dbPath, dovrai usare i tuoi script init e disabilitare gli script integrati.


1

Quando lo avvii ti mostra. Ma non so se è qualcosa che puoi fare o meno sul tuo host. Se hai accesso alla riga di comando e puoi riavviare il servizio, otterrai qualcosa del tipo:

    2016-11-15T12:57:09.182-0500 I CONTROL  [initandlisten]
 MongoDB starting : pid=16448 port=27017 dbpath=C:\data\db\ 
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.