MongoDB集群备份和恢复

注意:这是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()

MongoDB集群备份和恢复_第1张图片

类型包括

"i": insert
"u": update
"d": delete
"c": db cmd (删库,删表,建表)

模拟一下条件查询(我们删个库)

MongoDB集群备份和恢复_第2张图片

条件查询

db.oplog.rs.find({"op":"c"}).pretty()

MongoDB集群备份和恢复_第3张图片

 

oplog大小规划

rs.printReplicationInfo()

MongoDB集群备份和恢复_第4张图片

oplogSizeMB: 2048 定义的oplog大小

212.71hrs 这个指的是按照现在的数据增长oplog在212.71个小时后写满(预估时间),我们可以安装两次全备的时间长度来规划oplog大小,更建议是每天或者定时备份oplog

 

oplog恢复数据库

进行主库oplog备份(热备)

--oplog 会记录备份过程中的数据变化。会以oplog.bson保存下来

mongodump --port=28017 --oplog -o /mongodb/backup/

MongoDB集群备份和恢复_第5张图片

 

恢复备份

mongorestore --porot 28017 --oplogReplay /mongodb/backup/

 

基于oplog时间点的恢复

模拟恢复案例

1新建h1库t1表向里面插入数据

MongoDB集群备份和恢复_第6张图片

 

2 删除h1库

db.dropDatabase()

 

3 恢复准备

1查看oplog.rs删除t1表的时间点记录下来

use local

db.oplog.rs.find({"op":"c"}).pretty()

MongoDB集群备份和恢复_第7张图片

 

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 查看恢复情况

MongoDB集群备份和恢复_第8张图片

 

分片集群的备份思路
1、你要备份什么?
config server
shard 节点

单独进行备份
2、备份有什么困难和问题
(1)chunk迁移的问题
    人为控制在备份的时候,避开迁移的时间窗口
(2)shard节点之间的数据不在同一时间点。
    选业务量较少的时候 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(NoSQL)