2012-05-23 50 views
6

我想從另一臺服務器(這工作正常)轉儲數據庫,然後在新的服務器上恢復它(這不工作正常)。Mongodump和mongorestore;字段未找到

我第一次運行:

mongodump --host -d 

這將創建包含所有BSON文件的文件夾dump/db

轉儲文件夾

然後,我運行:

mongorestore -d dbname db 

這工作,並通過文件迭代,但我得到這個錯誤在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 

任何想法如何解決這個?

回答

7

任何機會的來源和目的地是不同的版本?

在任何情況下,爲了解決這個問題,請使用-c標誌分別恢復集合到目標數據庫,然後再構建索引。系統集合是用於索引的系統集合,因此重新創建相當容易 - 在其他所有內容都恢復後再進行最後一次嘗試,如果仍然失敗,則始終可以重新創建相關索引。

+0

謝謝!工作完美。 – dzm

+0

是的,嘗試從MongoHQ從本地「mongorestore」類似的問題。通過「brew」降級本地化,不再有任何錯誤。 –

+0

按版本你是指數據庫版本,還是某種模式版本? 'mongorestore'的版本是否在本地運行很重要,或者僅僅是版本和需要同步的版本? –

9

如果它真的不同版本,請使用--noIndexRestore選項。之後創建所有索引。

+1

適合我 –

3

的問題也可以在老版本的蒙戈造成這個錯誤(在我的情況下,它是2.0.8):

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

基本上,你當它實際上應該被提示您13111 field not found, expected type 16錯誤輸入您的驗證細節。

和實例我如何固定它:

[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! :) 

希望幫助的人誰的問題沒有得到由以前的2篇固定!

0

如果您嘗試將MongoDB存儲到MongoDB 2.6+並且您嘗試還原的轉儲在除admin之外的任何數據庫中包含​​表,也會發生這種情況。在MongoDB 2.2和2.4中,​​集合可能出現在任何數據庫中。與MongoDB 2.6關聯的auth模式遷移將所有用戶都移動到admin數據庫中的​​表中,但在其他數據庫中留下了​​表(MongoDB 2.6只是忽略了這些表)。這在導入到MongoDB 2.6時似乎會導致這個斷言。

相關問題