第6章 MongoDB模拟误删除
模拟误删库恢复
前提
1.只有副本集才会有oplog
2.oplog保存在local库里
3.mongodump的时候,默认不备份local库
模拟场景
1
2
3
全备
4
5
6
drop databases
准备数据
use backup
db.backup.insertOne({"id":1})
db.backup.insertOne({"id":2})
db.backup.insertOne({"id":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
写入增量数据
use backup
db.backup.insertOne({"id":4})
db.backup.insertOne({"id":5})
db.backup.insertOne({"id":6})
模拟误删除
use backup
db.dropDatabase()
备份oplog
mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d local -c oplog.rs -o mongo_backup
定位误删除操作的时间点
use local
db.oplog.rs.find({"ns" : "backup.$cmd"}).pretty()
找到误删除的位置点
"ts" : Timestamp(1587375719, 1)
截断oplog的drop时间点,然后恢复
cd mongo_backup
cp local/oplog.rs.bson oplog.bson
rm -rf local
mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --oplogReplay --oplogLimit=1587375719 mongo_backup --drop
生产中oplog配置多大
生产中需要设置多大?
1.差不多两个全备之间,相差时间内的数据量的大小
2.更改给定副本集成员的oplog大小或最小oplog保留期(在4.4中是新的)replSetResizeOplog不会改变副本集中任何其他成员的oplog大小。您必须replSetResizeOplog在集群中的每个副本集成员上运行,才能更改所有成员的操作日志大小或最小保留期限
官网地址
https://docs.mongodb.com/manual/core/replica-set-oplog/index.html
https://docs.mongodb.com/manual/reference/command/replSetResizeOplog/#dbcmd.replSetResizeOplog
相关命令
db.printReplicationInfo()
db.getReplicationInfo()
use admin
db.adminCommand(
{
replSetResizeOplog: 1,
size: 2048,
minRetentionHours: 24
}
)
更新: 2025-01-18 12:00:31