Восстановление на момент времени с воспроизведением oplog (возврат к состоянию до ошибочного drop/delete)
MongoDBБэкапКоманда
# 1) Full backup + oplog written during the backup (whole instance, from a replica set member):
mongodump --uri="mongodb://admin@mongo2:27017/?authSource=admin&readPreference=secondary" --oplog --gzip --out=/backup/full
# 2) Find the time of the bad operation (mongosh): db.getSiblingDB("local").oplog.rs.find({ "o.drop": "musteri" }).sort({ $natural: -1 }).limit(1)
# 3) Dump the oplog after the backup (t: start time of the full backup, epoch seconds):
mongodump --uri="mongodb://admin@mongo2:27017/?authSource=admin" --db=local --collection=oplog.rs --query='{"ts":{"$gte":{"$timestamp":{"t":1791400000,"i":1}}}}' --out=/backup/oplog
# 4) Restore the full backup together with its own oplog:
mongorestore --uri="mongodb://admin@target:27017/?authSource=admin" --gzip --oplogReplay /backup/full
# 5) Replay the oplog up to the bad operation (oplogLimit is exclusive):
mkdir /backup/pitr && mv /backup/oplog/local/oplog.rs.bson /backup/pitr/oplog.bson
mongorestore --uri="mongodb://admin@target:27017/?authSource=admin" --oplogReplay --oplogLimit=1791403600:1 /backup/pitrЧто делает
Делает полный бэкап согласованным с помощью --oplog, затем воспроизводит oplog, накопленный после бэкапа, до метки времени ошибочной операции (drop, массовое удаление), возвращая данные к этому моменту.
Когда использовать
Когда коллекция была удалена по ошибке или выполнено ошибочное массовое update/delete и нужно последнее состояние до повреждения.
Внимание
Восстанавливайте в отдельную цель, а не в рабочую систему, и переносите нужные данные после проверки. oplog от начала бэкапа до ошибочной операции должен всё ещё находиться в окне oplog; операции, выпавшие из окна, восстановить нельзя. --oplog работает только с полным дампом экземпляра (его нельзя сочетать с --db). Согласованное PITR с mongodump на шардированном кластере невозможно; нужен снимок файловой системы или продукт резервного копирования.