备份和还原MongoDB分片集群数据
1.使用mongodump备份小量分片集群数据
如果一个分片集群的数据集比较小,可以直接使用mongodump连接到mongos实例进行数据备份。默认情况下,mongodump到非primary的节点进行数据查询。
如:
mongodump --host 192.168.100.200 --port 28018 -d taiwan_game1 -o . mongorestore --host 192.168.100.200 --port 28018 taiwan_game1
需要注意的是如果使用mongodump的时候不指定库名或者集合名称,mongodump将直接从config server中获取集合数据和分片集群的元数据
mongodump --host 192.168.100.200 --port 28018 mongodump --host 192.168.100.200 --port 28018 -o .
不能使用--oplog参数从mongos获取数据,否则会报错。
can‘t use ‘local‘ database through mongos
如果要获取集群某一时刻的备份数据,需要停掉整个集群的写操作。
mongodump备份出来的数据不能反映集群中的集合的数据快和数据的分布情况。可以将数据恢复到任何MongoDB实例,或者是单个MongoDB实例,MongoDB Replica Set或者一个新的分片集群。
2.从文件系统快照中备份分片集群数据
如果要备份point-in-time实时集群数据,必须要停止集群中的所有写操作,在生产环境中,只能获取接近实时的数据备份。
1)停掉balancer进程,停止各个shard间数据的均匀分配。
在进行备份之前停掉balancer进程是基本操作,如果在备份的时候没有停掉balancer进程,那么备份出来的数据可能会有重复的或者丢失的情况发生,因为在备份的时候可能会有数据块迁移。
mongos> use config; switched to db config mongos> sh.stopBalancer(); Waiting for active hosts... Waiting for the balancer lock... Waiting again for active hosts after balancer is off...
2)锁定每个分片中的每个replica set中的一个Secondary成员。所以这时备份的数据可以最接近某一个的实时数据。使用db.fsyncLock()将所有挂起的写操作数据刷新到磁盘然后锁定mongodb实例。
3)备份其中一个config server数据。备份config server的数据就是备份整个集群的元数据。只需要备份其中一个的数据就行,因为每个config server的数据都是一样的。
可以使用以下两种方式备份:
A.创建一个文件系统快照。参见 Backup and Restore with Filesystem Snapshots
B.使用mongodump备份config server数据。
连接到其中一台config server
mongodump --host 192.168.100.65 --port 28018 --oplog -o .
4)备份锁定的Replica Set成员数据。 Backup and Restore with Filesystem Snapshots.
5)解锁被锁定的Replica Set成员。使用db.fsyncUnlock()
6)重新启动balancer进程
mongos> use config; switched to db config mongos> sh.setBalancerState(true);
3.
本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1621654
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。