2010-10-07 15 views
36

Sono nuovo di MongoDB e ho difficoltà a eseguire il backup del mio DB locale e ripristinarlo sul mio server. Ho trovato il collegamento sul sito web di Mongo: http://www.mongodb.org/display/DOCS/Import+Export+Tools ma ho ancora problemi con il ripristino.Mongorestore di un db che mi crea problemi

Quando faccio il mio backup chiamo

mongodump --db Gen 

poi vedo che tutte le collezioni sono discarica nella cartella /bin/dump/Gen

I copia-incolla dal locale al server nella stessa cartella chiamata

mongorestore --db Gen --drop --dbpath dump/Gen 

Ma ottengo il seguente: Error : root directory must be a dump of a single database when specifying a db name with --db

+0

cosa succede se si cambia directory in discarica/Gen e fuggi di nuovo con '--dbpath .' – luckytaxi

+0

intendi mongodump --db Gen --dbpath dump/Gen? non funziona ... – VinnyG

risposta

41

Ok ho scoprire che cosa sto facendo male:

stavo facendo

mongorestore --db Gen --drop --dbpath dump/Gen 

Ma senza --dbpath funziona perfettamente!

mongorestore --db Gen --drop dump/Gen 

Grazie a tutti!

+1

Vale la pena notare perché '--dbpath' imposta il percorso del ** database live **, non i dati di dumping. Puoi farlo per bypassare la connessione al databsae. –

+6

Solo per la cronologia, '--drop' è importante: senza di essa,' _id' già esistenti non vengono sostituiti. Ciò significa che le modifiche agli oggetti già esistenti nel db che stai ripristinando non verrebbero aggiunte. – drevicko

+0

il mongodb 'Gen' viene effettivamente abbandonato? Nel mio caso, al momento del ripristino, posso vedere i record precedenti che sono stati aggiunti dopo aver preso il dump. puoi risolvere il mio problema qui. http://stackoverflow.com/questions/22424347/drop-whole-database-within-a-single-command-of-restoring-the-dump-of-mongodb – codeofnode

5

Penso che la struttura delle cartelle potrebbe essere incasinata quando si tenta di spostarlo. Per esempio, questo funziona per me:

$ ./mongodump --db Gen 
$ ./mongorestore --db Gen --drop dump/Gen/ 

si fa a non provare a spostare la directory di discarica, e il ripristino da/bin/dump/Gen?

La directory specificata deve avere i file .bson in essa, ad esempio,

$ ls /bin/dump/Gen 
foo.bson bar.bson baz.bson 
+0

Ciao Kristina, se lo faccio sul mio computer locale funziona bene, il db viene ripristinato e non ottengo alcun errore. La directory che si sposta contiene i file .bson. Non posso eseguire il ripristino poiché i miei dbs sono visibili solo in locale, non riesco a scoprire come "aprire" il mio server (win2008) in modo che possa vederlo dall'esterno, penso che inizierò un'altra domanda per questo uno. – VinnyG

+0

Ok. L'istruzione if prima di questo errore è letteralmente "if (is_directory (p))" dove p è un file/directory in dump/Gen. Sei sicuro che non ci siano sottodirectory? – kristina

3

Una nota aggiuntiva per chi non vuole essere infastidito da l'errore "directory root deve essere una discarica di un unico database quando si specifica un nome di db con --db"

Quando si specifica --db e senza --collection (ripristino di un intero database): - il percorso specificato deve essere un percorso di directory - la directory non deve contenere altri file di .bson o .json. Ci ho messo un po 'a capire che la cartella nascosta svn (se si utilizza SVN) volontà rovinare lo script

+0

Aveva anche questo problema, ma nel mio caso Mongo creava il file mongo.lock in questa cartella mentre stavo cercando di ripristinare prima, I ' Ho cancellato il file e tutto ha funzionato come un fascino. – realnero

-1

Esempio:

./mongorestore -d db -c mycollection dump/db 

alzerà il seguente errore

ERROR: ERROR: root directory must be a dump of a single collection 
ERROR:  when specifying a collection name with --collection 

voi è possibile rimuovere l'opzione -c per risolvere questo errore.Base dump/db specifica il db, ma non la raccolta.

+1

Questo non risolve nulla. L'errore sta parlando dell'opzione -d, non dell'opzione -c – WattsInABox

3

Questo è ciò che ha finito per lavorare per me (mydb è il nome del mio database):

mongorestore --drop -db mydb mydbbackup/mydb/ 

Dopo il mio mongodump:

mongodump -d mydb -o mydbbackup 
Problemi correlati