注意:这是replica set或者master/slave模式专用
--oplog
use oplog for taking a point-in-time snapshot
oplog介绍
在replica set中oplog是一个定容集合(capped collection),它的默认大小是磁盘空间的5%(可以通过--oplogSizeMB参数修改).
位于local库的db.oplog.rs,有兴趣可以看看里面到底有些什么内容。
其中记录的是整个mongod实例一段时间内数据库的所有变更(插入/更新/删除)操作。
当空间用完时新记录自动覆盖最老的记录。
其覆盖范围被称作oplog时间窗口。需要注意的是,因为oplog是一个定容集合,所以时间窗口能覆盖的范围会因为你单位时间内的更新次数不同而变化。
启动复制集群
mongod -f /mongodb/28017/conf/mongod.conf
mongod -f /mongodb/28018/conf/mongod.conf
mongod -f /mongodb/28019/conf/mongod.conf
mongo --port=28017
use local
db.oplog.rs.find().pretty()
类型包括
"i": insert
"u": update
"d": delete
"c": db cmd (删库,删表,建表)
模拟一下条件查询(我们删个库)
条件查询
db.oplog.rs.find({"op":"c"}).pretty()
oplog大小规划
rs.printReplicationInfo()
oplogSizeMB: 2048 定义的oplog大小
212.71hrs 这个指的是按照现在的数据增长oplog在212.71个小时后写满(预估时间),我们可以安装两次全备的时间长度来规划oplog大小,更建议是每天或者定时备份oplog
oplog恢复数据库
进行主库oplog备份(热备)
--oplog 会记录备份过程中的数据变化。会以oplog.bson保存下来
mongodump --port=28017 --oplog -o /mongodb/backup/
恢复备份
mongorestore --porot 28017 --oplogReplay /mongodb/backup/
基于oplog时间点的恢复
模拟恢复案例
1新建h1库t1表向里面插入数据
2 删除h1库
db.dropDatabase()
3 恢复准备
1查看oplog.rs删除t1表的时间点记录下来
use local
db.oplog.rs.find({"op":"c"}).pretty()
2 备份oplog.rs表
mongodump --port=28017 -d local -c oplog.rs -o /mongodb/
3 把备份出来oplog.rs.bson拷贝到刚才--oplog备份的目录中并改名备份原oplog.bson
[root@test mongodb]# cp local/oplog.rs.bson backup/
mv oplog.rs.bson oplog.bson
4 恢复数据并排除刚才查出来删除t1表的时间点
mongorestore --port=28017 --oplogReplay --oplogLimit "1579486144:1" /mongodb/backup/
5 查看恢复情况
分片集群的备份思路
1、你要备份什么?
config server
shard 节点
单独进行备份
2、备份有什么困难和问题
(1)chunk迁移的问题
人为控制在备份的时候,避开迁移的时间窗口
(2)shard节点之间的数据不在同一时间点。
选业务量较少的时候