DBAtlas · Atlas für Datenbankbetrieb

Point-in-Time-Restore mit Oplog-Replay (Rückkehr vor ein fehlerhaftes drop/delete)

MongoDBBackup

Befehl

# 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

Was 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.

In DBAtlas öffnen →

Verwandte Einträge