mongodb删库后恢复

mongodb删库后恢复

模拟删库恢复

1.重置mongo数据库副本集,准备干净环境

rm -rf /data/mongo_28017/*
rm -rf /data/mongo_28018/*
rm -rf /data/mongo_28019/*
#ps: 不要一起复制,这里停两秒不然可能会报错
mongod -f /opt/mongo_28017/conf/mongodb.conf
mongod -f /opt/mongo_28018/conf/mongodb.conf
mongod -f /opt/mongo_28019/conf/mongodb.conf

1.1 新建副本集

mongo --port 28017
rs.initiate()  #初始化副本集,28017操作
rs.add("10.0.0.51:28018")  #将28018节点加入副本集
rs.add("10.0.0.51:28019")  #将28019节点加入副本集
# rs.addArb("10.0.0.51:28020") #将28020仲裁节点加入副本集,#ps:如果要加仲裁节点放到28019设备上就在28019服务器上操作加入仲裁节点。
rs.status()   #查看副本集基本信息

2.第一天写入数据

use backup
db.backup.insertOne({"id":1})
db.backup.insertOne({"id":2})
db.backup.insertOne({"id":3})

3.第一天全备数据

rm -rf mongo_backup/
mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup 
mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d local -o mongo_backup 

4.第二天写入增量数据

mongo --port 28017
use backup
db.backup.insertOne({"id":4})
db.backup.insertOne({"id":5})
db.backup.insertOne({"id":6})

5.第二天删库

use backup
db.dropDatabase()

6.查找误删库的时间点,找到上一次全备之后的时间点和误删除的时间点

#删库语句的上一个oplog时间戳为终点。

use local
db.oplog.rs.find({"ns" : "backup.$cmd"}).pretty()
{
	"ts" : Timestamp(1600946847, 1),
	"t" : NumberLong(1),
	"h" : NumberLong("-2568166064082827279"),
	"v" : 2,
	"op" : "c",
	"ns" : "backup.$cmd",
	"ui" : UUID("f6e1ae5a-9c71-4aa2-968f-630a72fdfd12"),
	"wall" : ISODate("2020-09-24T11:27:27.166Z"),
	"o" : {
		"drop" : "backup"
	}
}

终点: 1600946847

7.切割oplog,找出上次全备到现在为止的数据

#可先进到全备目录local里将oplog.rs.bson转成json格式,取最后一行得到起点时间戳

cd mongo_backup/local
bsondump --bsonFile=oplog.rs.bson --outFile=oplog.json
tail -1 oplog.json
{"ts":{"$timestamp":{"t":1600950471,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-8346344552776369296"},"v":2,"op":"n","ns":"","wall":{"$date":"2020-09-24T12:27:51.956Z"},"o":{"msg":"periodic noop"}}

起点:1600950471

8.恢复oplog起点之后的数据,导出增量数据

mongodump \
--host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" \
-d local \
-c oplog.rs \
-q '{ts:{$gt:Timestamp(1600950471,1)}}' \
-o mongo_backup_oplog
#这里填的是起点时间戳

9.移动到全备目录里 #将增量数据移到全量目录

ps:全量目录mongo_backup里面放的是原来全量的数据,现在把增量放进去数据就完整了

cd mongo_backup
cp /root/mongo_backup_oplog/local/oplog.rs.bson /root/mongo_backup/oplog.bson
rm -rf local #可删可不删,建议移走

10.在测试数据库恢复数据

mongorestore \
--host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" \
--oplogReplay \
--oplogLimit=1600946847 \ 
./mongo_backup --drop
#这里放的是终点时间戳,意思是恢复这个时间戳之前的数据

11.把恢复后的数据导出成json格式

bsondump --bsonFile=oplog.bson --outFile=oplog.json

12.没问题后在将恢复的json文件导入到生产数据库

13.再保险做一次全备

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页