方法一:通过oplog恢复如果你部署了MongoDB副本集,此时还有一线希望,可以尽量使用oplog来恢复数据;MongoDB副本集的每一次修改操作都会记录一个oplog,所以当数据库被误删除时,可以通过重放已有的oplog来“尽可能多地恢复数据”。不久前遇到的一个用户很幸运。数据库是最近创建的,所有的操作都还保存在oplog中,所以用户通过oplog找回了所有误删除的数据。通过oplog恢复数据的过程非常简单。只需要通过mongodump导出oplog集合,然后通过mongorestore的oplogReplay方式进行replay即可。Step1:导出oplog集mongodump-dlocal-coplog.rs-d-obackupdirStep2:复制oplog集的数据mkdirnew_backupdircpbackupdir/local/oplog.rs.bsonnew_backupdir/oplog.bsonStep3:Replayoplogmongorestore--oplogReplaynew_backupdir方法二:通过备份集如果你对MongoDB做过全量备份+增量备份,那么你可以通过备份集恢复数据。备份可以有多种形式,例如:使用mongodump等工具复制数据库的逻辑备份,复制dbpath目录生成的物理备份文件系统,以及卷管理生成的快照。从这里我们其实可以看出一个问题,就是“部署多节点复制集为什么还要做数据备份?”;当遇到误删数据库的问题时,dropDatabase命令也会同步到所有备节点,导致所有节点的数据都被删除。
