Point-in-Time-Restore mit Oplog-Replay (Rückkehr vor ein fehlerhaftes drop/delete)
MongoDBBackupBefehl
# 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/pitrWas es tut
Macht das Vollbackup mit --oplog konsistent und spielt dann das nach dem Backup angesammelte Oplog bis zum Zeitstempel der fehlerhaften Operation (drop, Massenlöschung) ein, wodurch die Daten auf diesen Zeitpunkt zurückgesetzt werden.
Wann einsetzen
Wenn eine Collection versehentlich gelöscht wurde oder ein fehlerhaftes Massen-Update/-Delete lief und du den letzten Stand vor dem Schaden brauchst.
Vorsicht
In ein separates Ziel wiederherstellen, nicht in das Live-System, und die benötigten Daten nach der Prüfung übertragen. Das Oplog vom Beginn des Backups bis zur fehlerhaften Operation muss noch im Oplog-Fenster liegen; aus dem Fenster gefallene Operationen lassen sich nicht wiederherstellen. --oplog funktioniert nur mit einem vollständigen Instanz-Dump (nicht kombinierbar mit --db). Konsistente PITR mit mongodump ist auf einem Sharded Cluster nicht möglich; dafür ist ein Dateisystem-Snapshot oder ein Backup-Produkt nötig.