2021元宵节记一次MongoDB集合误删除恢复实验

2021元宵节记一次MongoDB集合误删除恢复实验
如果有人看的话,无视排版,以后完全搞懂再回来完善

实验开始

模拟误删除个集合

搭建复制集跳过。。。
进入主库,for循环建个10000个文档的集合

lztrepl:PRIMARY> use lzt1
lztrepl:PRIMARY> for ( var i=0; i<10000; i++){ db.c1.create({name:"Jerry"+i})}

等集合创建完成后

lztrepl:PRIMARY> db.c1.count()
10000

然后假装手滑删了他

lztrepl:PRIMARY> db.c1.drop()

误删除完毕,开始恢复。

恢复数据

首先,按网上的步骤,先dump出oplog.rs

mongodump -d local -c oplog.rs -o /home/backup

然后查找删除集合的时间点

bsondump oplog.rs.bson | grep "\"op\":\"d\""

可是没有发现删除的语句,网上说上一句是查找删除的语句,怎么回事?
只能进入oplog.rs.bson,按数据库和集合名来找找看

bsondump oplog.rs.bson > 233
more 233

然后定位到插入的第10000条语句,往下翻一点,看到一条

{"op":"c","ns":"lzt1.$cmd","ui":{"$binary":{"base64":"3o2L56C9Qta12i5hoi/XCg==","subType":"04"}},"o":{"drop":"c1"},"o2":{"numRecords
":{"$numberInt":"10000"}},"ts":{"$timestamp":{"t":1614305152,"i":1}},"t":{"$numberLong":"11"},"wall":{"$date":{"$numberLong":"161430
5152425"}},"v":{"$numberLong":"2"}}

其中发现"o":{“drop”:“c1”},这个应该是我删除集合的语句,但是op为什么是c,代表create的意思?这里不明白写完再去查查这块。1

好不容易找到了误删除的时间点,后面就可以恢复了

mkdir -p /home/bk
cp oplog.rs.bson /home/bk/oplog.bson
mongorestore --oplogReplay --oplogLimit "1614305152:1" /home/bk

#中间运行过程掠过,这里只看结果
2021-02-26T12:43:16.930+0800	0 document(s) restored successfully. 0 document(s) failed to restore.

然后回数据库里查询,集合c1的10000条都已恢复,但是为什么上面的结果反馈的是0 document(s) restored successfully,这里也不明白2

至此,实验结束,午睡。
下午再去查那两个点。


  1. 不明白的地方1:会了再来修改 ↩︎

  2. 不明白的地方2:会了再来修改 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值