В MongoDB, mongorestore: "могу только повторить oplog на полное восстановление"


У меня возникли некоторые проблемы при восстановлении дампа и воспроизведение в MongoDB oplog.

Я должен воспроизвести оплог до определенного момента времени, выдав таким образом следующую команду:

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

Но mongorestore ответов "может только анализировать oplog на полное восстановление".

глядя на исходный код , кажется, что это сообщение об ошибке отображается, когда пользователь не указывает параметр --db, но я это сделал.

Знаете ли вы, что еще может быть причина?

1 2

1 ответ:

Я считаю, что это противоположная проблема - вы не можете указать базу данных при использовании опции 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, а не для конкретной базы данных. Я считаю, что использование mongodump с помощью -- oplog приведет к дампу всего экземпляра, и поэтому он не может быть повторно загружен только в одну базу данных.

Это довольно плохо документировано. 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.
Но это не совсем ясно.