標籤: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 28018mongodump --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 configmongos> 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 configmongos> sh.setBalancerState(true);
3.
本文出自 “Linux SA John” 部落格,請務必保留此出處http://john88wang.blog.51cto.com/2165294/1621654
備份與還原MongoDB分區叢集資料