2010-10-07 14 views
36

Jestem nowy w MongoDB i mam trudny czas, aby wykonać kopię zapasową lokalnego DB i przywrócić go na moim serwerze. Znalazłem link na stronie Mongo: http://www.mongodb.org/display/DOCS/Import+Export+Tools, ale wciąż mam problemy z przywróceniem.Mongorestore z db powodując mi kłopoty

Kiedy robię mój backup Wzywam

mongodump --db Gen 

Wtedy widzę, że wszystkie zbiory są wysypisko w /bin/dump/Gen folderze

I kopiuj-wklej z lokalnego na serwerze w tym samym folderze połączeń

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

Ale mam następujące: Error : root directory must be a dump of a single database when specifying a db name with --db

+0

co po zmianie katalogu do zrzutu/Gen i metę to znowu z '--dbpath .' – luckytaxi

+0

masz na myśli mongodump --db Gen --dbpath dump/Gen? nie działa ... – VinnyG

Odpowiedz

41

Ok dowiem się, co robię źle:

robiłem

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

Ale bez parametru --dbpath działa dobrze!

mongorestore --db Gen --drop dump/Gen 

Dziękuję wszystkim!

+1

Warto zauważyć, że '--dbpath' ustawia ścieżkę ** żywej bazy danych **, a nie danych porzuconych. Możesz to zrobić, aby ominąć połączenie z bazą danych. –

+6

Dla samego zapisu ważne jest "--drop": bez niego istniejące już "_id" nie są zastępowane. Oznacza to, że zmiany w obiektach, które już istnieją w db, do którego przywracasz, nie zostaną dodane. – drevicko

+0

to "Gen" mongodb faktycznie upuszczony? W moim przypadku, po przywróceniu, widzę poprzednie rekordy, które zostały dodane po zrobieniu zrzutu. czy możesz rozwiązać mój problem tutaj .. http://stackoverflow.com/questions/22424347/drop-whole-database-within-and-and-and-and-andoring-the-dump-of-mongodb – codeofnode

5

Myślę, że twoja struktura folderów może być pomieszana, kiedy próbujesz ją przenieść. Na przykład, to działa na mnie:

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

można nie spróbować przenieść katalog zrzutu i przywracania danych z/bin/wysypisko/Gen?

Katalog określić powinien mieć pliki .bson w nim, np

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

Cześć Kristina, jeśli robię to na moim lokalnym komputerze to działa dobrze, db jest przywracany i nie dostaję żadnego błędu. Katalog, w którym się poruszam, zawiera pliki .bson. Nie mogę wykonać przywracania, ponieważ moje dbs są widoczne tylko na poziomie lokalnym, nie mogę dowiedzieć się, jak "otworzyć" mój serwer (win2008), więc widzę to z zewnątrz, myślę, że zacznę inne pytanie na ten temat jeden. – VinnyG

+0

OK. Instrukcja if przed tym błędem jest dosłownie "if (is_directory (p))", gdzie p jest plikiem/katalogiem w dump/Gen. Czy na pewno nie ma tam żadnych podkatalogów? – kristina

3

Dodatkowa uwaga dla tego, kto nie chce być denerwują błędu „katalog główny musi być nora z jednej bazy danych, gdy podając nazwę dB --db”

Określając --db i bez --collection (przywracanie całej bazy danych): - podana ścieżka musi być ścieżką do katalogu - katalog nie może zawierać żadnych innych plików niż .bson lub .json. Zajęło mi trochę czasu, aby uświadomić sobie, że ukryte .svn folderu (jeśli używasz SVN) będzie bałagan skrypt

+0

Miałeś także ten problem, ale w moim przypadku Mongo utworzy plik mongo.lock w tym folderze, podczas gdy ja próbowałem przywrócić wcześniej. ve usunął plik i wszystko działało jak czar. – realnero

-1

Przykład:

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

podniesie się następujący błąd

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

ci można usunąć opcję -c, aby obsłużyć ten błąd. Zrzut dysku/db określa db, ale nie zbiera.

+1

To niczego nie naprawia. Błąd mówi o opcji -d, a nie opcji -c – WattsInABox

3

To, co skończyło się pracuje dla mnie (mydb to nazwa mojej bazy danych):

mongorestore --drop -db mydb mydbbackup/mydb/ 

Po moim mongodump:

mongodump -d mydb -o mydbbackup