7

我正在尝试从另一台服务器转储数据库(这工作正常),然后在新服务器上恢复它(这不能正常工作)。

我首先运行:

mongodump --host -d

这将创建一个dump/db包含所有 bson 文档的文件夹。

然后在转储文件夹中,我正在运行:

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

任何想法如何解决这个问题?

4

4 回答 4

11

如果它真的不同版本,请使用--noIndexRestore选项。并在此之后创建所有索引。

于 2013-01-10T08:35:20.220 回答
7

源和目标是否有可能是不同的版本?

在任何情况下,要解决此问题,请使用 -c 标志将集合单独恢复到目标数据库,然后再构建索引。系统集合是用于索引的集合,因此重新创建相当容易 - 在其他所有内容恢复后最后尝试,如果仍然失败,您始终可以重新创建相关索引。

于 2012-05-23T14:50:49.140 回答
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个回复没有解决问题的人有所帮助!

于 2013-05-24T14:09:56.097 回答
0

如果您尝试 mongorestore 到 MongoDB 2.6+ 并且您尝试恢复的转储包含system.users除 admin 之外的任何数据库中的表,也会发生这种情况。在 MongoDB 2.2 和 2.4 中,system.users集合可以出现在任何数据库中。与 MongoDB 2.6 关联的身份验证模式迁移将所有用户移动到system.usersadmin 数据库中的表中,但留下system.users了其他数据库中的表(MongoDB 2.6 只是忽略了这些)。在导入 MongoDB 2.6 时,这似乎会导致此断言。

于 2016-01-28T22:32:39.450 回答