mongodb备份与恢复(上)(二)

2014-11-24 13:57:17 · 作者: · 浏览: 1
oplog replay; the ordinal
24
value is optional
25
--keepIndexVersion don't upgrade indexes to newest version
26
--noOptionsRestore don't restore collection options
27
--noIndexRestore don't restore indexes
28
--w arg (=0) minimum number of replicas per write
恢复整个数据库
1
# mongorestore -p 27017 dump/
恢复到特定的库和集合:
1
# mongorestore --db ttlsa_com --collection posts dump/old_ttlsa_com/old_posts.bson
注意: mongodump和mongorestore版本最好相匹配。
二. 备份复制集
通常情况下,在secondary进行备份,降低primary负载,只在secondary上锁定,以免影响业务(假设没有发送读请求到secondary)。 可以使用上面的任意方式进行备份,不过推荐使用文件快照方式和复制数据文件方式。
使用mongodump备份,上面提到了一个问题,那就是在mongodump备份过程中,发生写操作。在复制集架构环境下,要避免这种情况发生,mongodump需要加上--oplog参数,来跟踪备份时服务器上发生的所有操作,获取一个pointin-time快照,否则备份的状态将与集群中其他节点不匹配。在恢复时,还必须创建oplog,并指定--oplogReplay参数来应用这些操作,否则恢复的成员将不知道从何处开始同步,从而在某个时间点上与源服务器保持一致。
在备份复制集时,可以设置mongodump连接"setName/s1,s2,s3", 它会自动选择一个可用的secondary进行备份。
备份复制集:
1
# mongodump -h "ttlsa/10.1.1.155,10.1.1.156,10.1.1.157" --oplog -o /backup/mongodbbackup/
恢复复制集步骤:
1. 将复制集中要恢复的成员移除集群
2. 运行mongorestore --oplogReplay命令
1
# mongorestore --oplogReplay dump/
3. 创建oplog
1
> use local
2
> db.createCollection("oplog.rs", {"capped" : true, "size" : 10000000})
4. 恢复oplog
1
# mongorestore -d local -c oplog.rs dump/oplog.bson
注意:oplog.bson不位于dump/local/oplog.rs.bson, oplog.bson记录mongodump过程中发生的操作。
5. 将该节点添加到复制集集群中
三. 备份分片
在分片集群下,不可能在一个时间点上得到一个完整集群状态的快照。当集群越来越大时,从备份恢复整个架构的几率越来越小的。 因此,对于分片集群的备份,只需独自备份config server和复制集。
在对分片集群进行备份与恢复操作前,要关闭balancer。
对于比较小的分片集群,可以直接从mongos来备份与恢复。
在大多数情况下,我们只需要恢复集群中的某个节点。 如果需要恢复整个集群,那你够倒霉的了,整个集群数据丢失可能性比较小的。备份时,直接连接分片集群的mongod而不是通过mongos。
对于比较小型的分片集群,可以直接通过mongodump连接到mongos进行备份,备份的文件将包含config服务器的元数据信息和实际数据。
对于大型的分片集群,备份步骤如下:
1. 关闭balancer
注意:连接到mongos而不是config server实例。
1
> sh.setBalancerState(false) 或
2
> sh.stopBalancer() 或
3
> use config
4
> db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
2. 备份集群元数据
使用mongodump备份任意一台config server。
可以直接连接任意一台的config mongod实例,也可以通过mongos连接。
1
# mongodump --db config
3. 备份shard集群内各个replica set
可并行执行。
4. 启用balancer
注意:连接到mongos而不是config server实例。
1
> sh.setBalancerState(true) 或
2
> sh.startBalancer() 或
3
> use config
4
> db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );