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