我正在尝试从另一台服务器转储数据库(这很好),然后在新服务器上恢复它(这不能正常工作)。
我先跑:
mongodump --host -d
这将创建一个文件夹dump/db
,其中包含所有bson文档。
然后在dump文件夹中,我正在运行:
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
有任何想法如何解决这个问题?
答案 0 :(得分:9)
如果它的版本不同,请使用--noIndexRestore
选项。然后创建所有索引。
答案 1 :(得分:7)
源和目的地是否有不同的版本?
在任何情况下,要解决此问题,请使用-c标志单独还原集合到目标数据库,然后再构建索引。系统集合是用于索引的系统集合,因此它很容易重新创建 - 一旦其他所有内容都被还原就会再次尝试,如果它仍然失败,您可以随时重新创建相关索引。
答案 2 :(得分:3)
这个问题也可能是由旧版Mongo中的这个错误导致的(在我看来是2.0.8):
https://jira.mongodb.org/browse/SERVER-7181
基本上,如果它实际上提示您输入身份验证详细信息,则会出现13111 field not found, expected type 16
错误。
我如何解决它的例子:
root@precise64:/# 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
root@precise64:/# 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个回复修复!
答案 3 :(得分:0)
如果您尝试将mongorestore迁移到MongoDB 2.6+中,并且您尝试还原的转储在除admin之外的任何数据库中都包含system.users
表,也会发生这种情况。在MongoDB 2.2和2.4中,system.users
集合可以出现在任何数据库中。与MongoDB 2.6相关联的身份验证模式迁移将所有用户移动到admin数据库中的system.users
表中,但是留在其他数据库中的system.users
表中(MongoDB 2.6忽略了这些)。这似乎在导入MongoDB 2.6时会导致这种断言。