MongoDB,mongorestore:"只能在完全恢复时重放oplog"

时间:2014-05-14 00:19:05

标签: mongodb mongodump mongorestore

我在恢复转储和重放MongoDB上的oplog时遇到了一些麻烦。

我必须将oplog重播到某个时间点,从而发出以下命令:

mongorestore --port <n> --db <name> --oplogReplay --oplogLimit <ts> <dumpfile>

但mongorestore回复“只能在完全恢复时重播oplog”。

Looking at the source code当用户未指定--db选项时,似乎会显示此错误消息,但我确实这样做了。

你知道其他原因吗?

1 个答案:

答案 0 :(得分:2)

我认为这是相反的问题 - 使用oplog选项时无法指定数据库。您找到的代码:

 if (mongoRestoreGlobalParams.oplogReplay) {
            // fail early if errors

            if (toolGlobalParams.db != "") {
                toolError() << "Can only replay oplog on full restore" << std::endl;
                return -1;
            }
当您同时指定oplogReplay和数据库时,

会触发。

请记住,oplog适用于整个mongodb实例,而不是特定的数据库。我相信使用--oplog使用mongodump将转储整个实例,因此无法将其重新加载到一个数据库中。

记录相当糟糕。 Mongolab在其文档中提到了它:

Point-in-time method

Applicable to Dedicated plans only

If you have a Dedicated plan, you can take server-wide mongodumps to export all of the databases on the server.

This method is useful because it allows you to use the the --oplog and --oplogReplay options to mongodump and mongorestore (respectively). The options allow for a point-in-time snapshot of the server by also including the oplog in the dump. This oplog is then replayed when you use the --oplogReplay option upon restore.

但不太清楚。