2012-05-23 10 views
6

Próbuję zrzucić bazę danych z innego serwera (działa to dobrze), a następnie przywrócić ją na nowym serwerze (to nie działa dobrze).Mongodump and mongorestore; nie znaleziono pola

raz pierwszy uruchomić:

mongodump --host -d 

To tworzy folder dump/db która zawiera wszystkie dokumenty bson.

Następnie w folderze zrzutu, biegnę:

mongorestore -d dbname db 

To działa i iteracji plików, ale pojawia się ten błąd na dbname.system.users

Wed May 23 02:08:05 { key: { _id: 1 }, ns: "dbname.system.users", name: "_id_" } 
Error creating index dbname.system.usersassertion: 13111 field not found, expected type 16 

jakieś pomysły jak rozwiązać ten problem ?

Odpowiedz

7

Czy istnieje szansa, że ​​źródło i miejsce docelowe są różnymi wersjami?

W każdym razie, aby to obejść, przywróć kolekcje indywidualnie, używając flagi -c do docelowej bazy danych, a następnie skompiluj indeksy później. Kolekcja systemowa jest używana do indeksów, więc jest dość łatwa do odtworzenia - wypróbuj ostatnią, gdy wszystko inne zostanie przywrócone, a jeśli nadal się nie powiedzie, zawsze możesz po prostu odtworzyć odpowiednie indeksy.

+0

Dzięki! Pracował idealnie. – dzm

+0

Tak, miał podobny problem z próbą 'Mongorestore' do MongoHQ od lokalnego. Ulepszone lokalne poprzez 'brew' i nie więcej błędów. –

+0

Według wersji masz na myśli wersję bazy danych lub jakiś schemat? Czy wersja 'mongorestore' działa lokalnie, czy też tylko wersje od i muszą być zsynchronizowane? –

9

Jeśli to naprawdę różne wersje, użyj opcji --noIndexRestore. Następnie utwórz cały indeks.

+1

Dobrze mi się powiodło –

3

Problem może również spowodowany ten błąd w starszych wersjach Mongo (w moim przypadku było to 2.0.8):

https://jira.mongodb.org/browse/SERVER-7181

Zasadniczo masz 13111 field not found, expected type 16 błąd, gdy powinna ona być w rzeczywistości monitem wprowadzić dane uwierzytelniające.

A przykładem tego, jak naprawiłem go:

[email protected]:/# mongorestore /backups/demand/ondemand.05-24-2013T114223/ 
connected to: 127.0.0.1 
[REDACTED] 
Fri May 24 11:48:15  going into namespace [test.system.indexes] 
Fri May 24 11:48:15 { key: { _id: 1 }, ns: "test.system.users", name: "_id_" } 
Error creating index test.system.usersassertion: 13111 field not found, expected type 16 
# Error when not giving username and password 

[email protected]:/# mongorestore -u fakeuser -p fakepassword /backups/demand/ondemand.05-24-2013T114223/ 
connected to: 127.0.0.1 
[REDACTED] 
Fri May 24 11:57:11 /backups/demand/ondemand.05-24-2013T114223/test/system.users.bson 
Fri May 24 11:57:11  going into namespace [test.system.users] 
1 objects found 
# Works fine when giving username and password! :) 

nadzieję, że pomoże każdemu, kto jest problem nie zostanie ustalona przez poprzednich 2 odpowiedzi!

0

Może się to również zdarzyć, jeśli próbujesz przechowywać pliki w MongoDB 2.6+, a zrzut, który próbujesz przywrócić, zawiera tabelę system.users w dowolnej bazie danych poza adminem. W MongoDB 2.2 i 2.4 kolekcje system.users mogą występować w dowolnej bazie danych. Migracja schematu auth powiązana z MongoDB 2.6 spowodowała przeniesienie wszystkich użytkowników do tabeli system.users w administracyjnej bazie danych, ale pozostawiła tabele system.users w innych bazach danych (MongoDB 2.6 po prostu je ignoruje). Wydaje się to powodować to stwierdzenie podczas importowania do MongoDB 2.6.