我在恢复转储和在 MongoDB 上重放 oplog 时遇到了一些麻烦。
我必须重播 oplog 到某个时间点,因此发出以下命令:
mongorestore --port <n> --db <name> --oplogReplay --oplogLimit <ts> <dumpfile>
但 mongorestore 回复“只能在完全恢复时重播 oplog”。
查看源代码,当用户未指定 --db 选项时,似乎会显示此错误消息,但我确实这样做了。
你知道还有什么原因吗?
我在恢复转储和在 MongoDB 上重放 oplog 时遇到了一些麻烦。
我必须重播 oplog 到某个时间点,因此发出以下命令:
mongorestore --port <n> --db <name> --oplogReplay --oplogLimit <ts> <dumpfile>
但 mongorestore 回复“只能在完全恢复时重播 oplog”。
查看源代码,当用户未指定 --db 选项时,似乎会显示此错误消息,但我确实这样做了。
你知道还有什么原因吗?
我相信这是相反的问题 - 使用 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.
但不是很清楚。