mongodb误删数据该如何恢复

您所在的位置:网站首页 navicat删除数据库怎么恢复 mongodb误删数据该如何恢复

mongodb误删数据该如何恢复

2024-06-15 09:57| 来源: 网络整理| 查看: 265

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

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

步骤二:取得误删数据库的操作记录,并将操作的数据备份成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地址。

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3