mongodb误删数据该如何恢复

mongodb误删数据该如何恢复

在mongodb库中使用脚本执行remove操作,误删有效数据该如何恢复。
mongodb—3.4.2

  1. 原理
    mongodb的任何操作都会在其中的local库中记录下来,只要能找回误删的数据,对数据库执行增量导入,就可以恢复误删数据。

  2. 步骤一:取得数据库备份数据,及备份数据时时间戳。
    为避免在数据恢复过程中有其他数据改变,影响数据,将开启一个新的数据库实例,导入之前的备份数据,同时,恢复的误删数据也将导入到新的数据库实例
    1.导入备份数据
    ./mongorestore -h ip:port -d dbname --drop filepath
    2.将备份时间取出,并转化为时间戳。

  3. 步骤二:取得误删数据库的操作记录,并将操作的数据备份成bson文件
    1.回到原数据库,执行下列命令取出操作记录
    use local; db.getCollection('oplog.rs').find({op:"d",ns:"dbname.collectionname",ts:{$gt:Timestamp(1620263697,1)}})
    op:‘d’ 代表删除操作,
    ns:‘xx.xx’ 代表数据库和集合名称
    1620263697:是备份数据的时间戳
    其中op,可以是如下几种情形之一:
    “i”: insert
    “u”: update
    “d”: delete
    “c”: db cmd
    “db”:声明当前数据库 (其中ns 被设置成为=>数据库名称+ ‘.’)
    “n”: no op,即空操作,其会定期执行以确保时效性。修改配置,会产生 “n” 操作。
    将会得到如下格式的数据集合
    { "ts" : Timestamp(1620266081, 1), "h" : NumberLong(-3440087969162658404), "v" : 2, "op" : "d", "ns" : "dbname.collectionname", "o" : { "_id" : "2JNZQvCx0" } }
    通过这个结果,可以查看到执行误操作的时间戳ts,以及此次误操作涉及的数据id。
    2.用目前获取的两个时间戳,将此时间段的操作数据备份成bson文件
    mongodump -h ip:port -d local -c oplog.rs -q '{ts:{$lt:Timestamp(误操作时间戳, 1),$gt: Timestamp(备份时间戳, 1)}}' -o filepath
    此命令将数据备份成bson文件并导出到filepath地址。

  4. 步骤三:恢复误操作数据到新的数据库实例中。
    将之前的备份文件放到新数据路实例下,并执行下列命令:
    mongorestore --port 27018 --oplogReplay /tmp/zl/local/oplog.rs.bson
    如此新的数据库实例中数据将恢复到误操作之前的数据。

  5. 后续数据操作
    完成上述步骤后,对于数据的操作将视情况看是否需要,如果是要将删除的数据做其他处理,然后再恢复到原数据库中,可以根据删除记录中的id找到对应数据,取出处理后,将得到的新数据写成json文件使用mongoimport -h ip:port --db dbname --collection collectionname --jsonArray --file stderr.json命令将数据重新入库。如果不需要其他操作,也可以直接将备份出的bson文件直接恢复到原数据库中。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值