mongorestore无法工作。集合为空。

4
我正在尝试将一个 MongoDB 集合导出到文件,然后使用该文件将其恢复到另一个 MongoDB 实例。
导出 -
mongodump --host 127.0.0.1 --port 27017 --username vespauser --password <passwd> --collection vespastats --db vespa --out /archive/vespa-archive/vespa-db-backup_001

    connected to: 127.0.0.1:27017
    2015-04-21T16:24:07.070-0400 DATABASE: vespa      to     /archive/vespa-archive/vespa-db-backup_testing01/vespa
    2015-04-21T16:24:07.141-0400    vespa.system.indexes to /archive/vespa-archive/vespa-db-backup_testing01/vespa/system.indexes.bson
    2015-04-21T16:24:07.148-0400             4 documents
    2015-04-21T16:24:07.149-0400    vespa.vespastats to /archive/vespa-archive/vespa-db-backup_testing01/vespa/vespastats.bson
    2015-04-21T16:24:07.316-0400             59724 documents
    2015-04-21T16:24:08.118-0400    Metadata for vespa.vespastats to /archive/vespa-archive/vespa-db-backup_testing01/vespa/vespastats.metadata.json

恢复 -
mongorestore -v --drop --host 127.0.0.1 --port 27017 --username admin --password <passwd> /archive/vespa-archive/vespa-db-backup_001

2015-04-21T16:31:11.962-0400 creating new connection to:127.0.0.1:27017
2015-04-21T16:31:11.963-0400 [ConnectBG] BackgroundJob starting: ConnectBG
2015-04-21T16:31:11.963-0400 connected to server 127.0.0.1:27017 (127.0.0.1)
2015-04-21T16:31:11.963-0400 connected connection!
connected to: 127.0.0.1:27017
2015-04-21T16:31:11.966-0400 /home/amurty/vespa-db/vespa-db-backup_testing01/vespa/vespastats.bson
2015-04-21T16:31:11.966-0400    going into namespace [vespa.vespastats]
2015-04-21T16:31:11.966-0400     dropping
         file size: 88808161
59724 objects found
2015-04-21T16:31:13.730-0400    Creating index: { key: { _id: 1 }, name: "_id_", ns: "vespa.vespastats" }
2015-04-21T16:31:13.848-0400    Creating index: { key: { url: 1 }, name: "url_1", ns: "vespa.vespastats", background: true }
2015-04-21T16:31:13.858-0400    Creating index: { key: { r_tstpm: 1 }, name: "r_tstpm_1", ns: "vespa.vespastats", background: true }
2015-04-21T16:31:13.859-0400    Creating index: { key: { url: 1, r_tstpm: 1 }, name: "url_1_r_tstpm_1", ns: "vespa.vespastats", background: true }

来自/var/log/mongodb/mongod.log -
2015-04-21T16:31:11.963-0400 [initandlisten] connection accepted from 127.0.0.1:58444 #23 (1 connection now open)
2015-04-21T16:31:11.964-0400 [conn23]  authenticate db: admin { authenticate: 1, nonce: "xxx", user: "admin", key: "xxx" }
2015-04-21T16:31:11.968-0400 [conn23] CMD: drop vespa.vespastats
2015-04-21T16:31:13.757-0400 [conn23] allocating new ns file /var/lib/mongo/vespa.ns, filling with zeroes...
2015-04-21T16:31:13.838-0400 [FileAllocator] allocating new datafile /var/lib/mongo/vespa.0, filling with zeroes...
2015-04-21T16:31:13.846-0400 [FileAllocator] done allocating datafile /var/lib/mongo/vespa.0, size: 64MB,  took 0.007 secs
2015-04-21T16:31:13.847-0400 [conn23] build index on: vespa.vespastats properties: { v: 1, key: { _id: 1 }, name: "_id_", ns: "vespa.vespastats" }
2015-04-21T16:31:13.848-0400 [conn23]    added index to empty collection
2015-04-21T16:31:13.857-0400 [conn23] build index on: vespa.vespastats properties: { v: 1, key: { url: 1 }, name: "url_1", ns: "vespa.vespastats", background: true }
2015-04-21T16:31:13.857-0400 [conn23]    added index to empty collection
2015-04-21T16:31:13.858-0400 [conn23] build index on: vespa.vespastats properties: { v: 1, key: { r_tstpm: 1 }, name: "r_tstpm_1", ns: "vespa.vespastats", background: true }
2015-04-21T16:31:13.859-0400 [conn23]    added index to empty collection
2015-04-21T16:31:13.860-0400 [conn23] build index on: vespa.vespastats properties: { v: 1, key: { url: 1, r_tstpm: 1 }, name: "url_1_r_tstpm_1", ns: "vespa.vespastats", background: true }
2015-04-21T16:31:13.860-0400 [conn23]    added index to empty collection
2015-04-21T16:31:13.862-0400 [conn23] end connection 127.0.0.1:58444 (0 connections now open)

现在当我登录到我的新MongoDB实例并检查集合大小时,我得到了一个大的0 -
# mongo
MongoDB shell version: 2.6.9
connecting to: test
> use vespa
switched to db vespa
> db.auth('vespauser', '<paswd>')
1
> db.vespastats.find()
> db.vespastats.count()
0
>

除了缺乏文档之外,一切看起来都很好...原始集合中的计数是多少(而不是通过日志获得的)? - wdberkeley
自从我运行了该程序后,原始数据库中添加了更多的数据,因此现在的计数为-60841。我使用db.collectionname.count()获得了该计数。 - Quest Monger
1个回答

0

集合可能存在于已使用的数据库中,但查询未返回错误,只是返回0。

db.vespastats.find().count()

问题应该是因为它被添加到数据库test中。(文档提到它应该是自动的,但我能够重现这种行为)。

因此

use test
db.vespastats.find().count()

原本应该返回集合vespastats中的实际文档。问题是在使用mongo二进制命令mongorestore时未指定数据库名称引起的。 mongorestore文档更新后的版本应该是mongorestore --nsInclude=vesta.vestastats(即使-d仍然有效)。

要知道集合会落在哪里,我会运行两次还原转储并在mongo shell中检查show dbs 3次(之前和之后)。数据库大小正在改变(虽然不会立即显示,因为可能会在恢复后立即显示8kb)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接