时间点恢复(PITR)必须结合全量快照与oplog回放,前提是oplog覆盖目标时间且备份与oplog匹配;oplog为capped集合,若目标时间早于其最早时间戳则不可恢复。
不能直接靠 mongorestore 实现时间点恢复(PITR),必须结合全量快照 + oplog.rs 回放。关键前提是:你得有覆盖目标时间点的完整 oplog,且备份与 oplog 必须匹配。
副本集的 oplog.rs 是固定大小的 capped collection,旧日志会被自动覆盖。如果目标恢复时间早于 oplog 最早时间戳,就彻底不可恢复。
db.printReplicationInfo(),看 oldest timestamp 是否早于你要恢复的时间db.oplog.rs.find().sort({$natural: -1}).limit(1) 查最新写入时间,用 db.oplog.rs.find().sort({$natural: 1}).limit(1) 查最老时间printReplicationInfo() 输出的 “oldest” 是估算值,实际以 find().sort({$natural: 1}) 结果为准--oplog 不是“开启 oplog”,而是让 mongodump 在备份结束那一刻记录下当前 oplog.rs 的最后位置(即 ts 字段),并把该位置写入备份目录下的 oplog.bson 文件。这个文件是后续回放的基础。
oplog 位置失效)mongodump --host rs0/192.168.10.41:27017 --oplog --out /backup/20260721
--oplog 本身不捕获备份过程中的所有变更——它只记一个起始位点;真正用于 PITR 的 oplog 日志,要从备份时刻开始,从副本集实时拉取或从归档中获取oplog.bson
先用 mongorestore 恢复全量快照,再用 mongorestore --oplogReplay 回放 oplog ——但这个选项只支持回放到 oplog.bson 记录的那个终点时间,不支持任意时间点。
mongodump --collection oplog.rs --query '{ts: {$lt: Timestamp(1753158420, 1)}}' 导出截止到某时间的 oplog 子集mongorestore --oplogReplay --oplogFile oplog_filtered.bson 应用--nojournal)、以 --replSet 模式启动但不加入副本集(避免触发复制)rs.initiate() 或 rs.reconfig() 重建副本集配置,否则节点无法正常选举真正容易被忽略的不是命令怎么写,而是 oplog 的生命周期管理和快照-日志对齐。Ops Manager 和 Atlas 把这事封装掉了,但自建环境里,oplog.rs 大小、备份频率、网络延迟导致的 oplog 同步滞后,三者稍一错位,时间点就断档。别等故障了才查 oplog 能不能撑住 24 小时。
小米路由器3G怎么恢复出厂设置(小米路由器3G该如何恢复出厂设置)
小米路由器3g和4a千兆版哪个好(小米路由器3g和4a千兆版对比区别)
Sensor Tower:ChatGPT全球份额跌破50%,Gemini与Claude加速追赶
OpenAI提速狂飙16倍!GPT-5.6多智能体V2上线,741轮怪物对话1秒打开
“十五五”时期 煤矿危险繁重岗位将由机器人替代
waytouniverse/ppt-generator:从 Markdown 大纲生成风格统一的 PPT 图片