MongoDB備份方式詳細介紹
1. 檔案快照方式
2. 複製資料檔案方式
3. 使用mongodump方式
一. 備份單臺mongodb
1. 檔案快照方式
這是最簡單的備份方法。但是,需要系統檔案支援快照和mongod必須啟用journal。如果都符合這兩條要求,可以在任何時刻建立快照。恢復時,確保沒有執行mongod,執行快照恢復操作命令,然後啟動mongod程式,mongod將重放journal日誌。
2. 複製資料檔案方式
直接複製資料目錄下的一切檔案。但是在複製過程中必須阻止資料檔案發生更改。因此需要對資料庫加鎖,以防止資料寫入。
1
|
> db.fsyncLock()
|
上面的命令將阻塞寫入操作,並將髒資料重新整理到磁碟上,確保資料一致。
然後,複製資料檔案到備份目錄下
1
|
# cp -R /data/db/* /backup
|
檔案複製完成後,對資料庫進行解鎖,允許寫操作
1
|
> db.fsyncUnlock()
|
注意: 在執行db.fsyncLock()和db.fsyncUnlock()時,不能關閉當前的shell視窗,否則可能無法連線而需要重新啟動mongod服務。
恢復時,確保mongod沒有執行,清空資料目錄,將備份的資料複製到資料目錄下,然後啟動mongod
1
2
|
# cp -R /backup/* /data/db/
# mongod -f mongod.conf
|
3. 使用mongodump方式
千萬不要fsyncLock與mongodump配合使用,如果資料庫被鎖定了,mongodump將永遠掛起。使用mongodump備份比較慢,在備份複製集時還有些問題,後續會說到。但是,用來備份單個資料庫、集合、子集合還是比較好的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# ./mongodump --help
options:
--help 顯示幫助資訊
-v [ --verbose ] 列印出更多資訊,如時間等等 -vvvvv
--version 列印版本資訊
-h [ --host ] arg 指定連線的mongodb主機,複製集時設定為<set name>/s1,s2
--port arg 指定mongodb埠號,也可以這麼指定--host hostname:port
--ipv6 啟用支援IPv6 support
-u [ --username ] arg 使用者名稱
-p [ --password ] arg 密碼
--authenticationDatabase arg user source (defaults to dbname)
--authenticationMechanism arg (=MONGODB-CR)
authentication mechanism
--dbpath arg 直接訪問mongod的資料庫檔案,而不是連線到mongodb伺服器。需要鎖定資料目錄,如果mongod當前在訪問相同路徑將不能使用。也就是說,mongod執行的情況下不能使用--dbpath,mongod未執行的情況下可以直接指定--dbpath
--directoryperdb 每個db一個單獨的目錄,需要指定dbpath
--journal 啟用journaling,需要指定dbpath
-d [ --db ] arg 指定資料庫
-c [ --collection ] arg 指定集合
-o [ --out ] arg (=dump) 指定輸出目錄,"-"表示標準輸出
-q [ --query ] arg json查詢
--oplog 使用oplog來生產時間點快照
--repair 嘗試恢復崩潰的資料庫
--forceTableScan 強制表掃描,不使用$snapshot
|
1
|
# mongodump -p 27017
|
將在當前目錄下建立dump目錄,備份所有的資料庫,所有的資料儲存在.bson檔案中,可以使用mongodb提供的bsondump工具來檢索它。
mongod未執行情況下:
1
|
# mongodump --dbpath /data/db
|
恢復時,使用mongorestore工具恢復
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# ./mongorestore --help //相同部分引數意義參加上面的mongodump
-v [ --verbose ]
--version
-h [ --host ] arg
--port arg
--ipv6
-u [ --username ] arg
-p [ --password ] arg
--authenticationDatabase arg
--authenticationMechanism arg (=MONGODB-CR)
--dbpath arg
--directoryperdb
--journal
-d [ --db ] arg
-c [ --collection ] arg
--objcheck 在插入前驗證物件,預設啟用
--noobjcheck 不在插入前驗證物件
--filter arg 插入前過濾
--drop 在插入前刪除所有文件
--oplogReplay 在恢復時應用oplog
--oplogLimit arg include oplog entries before the
provided Timestamp (seconds[:ordinal])
during the oplog replay; the ordinal
value is optional
--keepIndexVersion don't upgrade indexes to newest version
--noOptionsRestore don't restore collection options
--noIndexRestore don't restore indexes
--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
2
|
> use local
> 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
2
3
4
|
> sh.setBalancerState(false) 或
> sh.stopBalancer() 或
> use config
> 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
2
3
4
|
> sh.setBalancerState(true) 或
> sh.startBalancer() 或
> use config
> db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1965793/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- IBM Tivoli storage manage(TSM)備份軟體詳細介紹IBM
- javascript this詳細介紹JavaScript
- JDBC 詳細介紹JDBC
- Kafka詳細介紹Kafka
- Git詳細介紹Git
- Go Channel 詳細介紹Go
- Nacos 介面詳細介紹
- MQ詳細命令介紹MQ
- Recovery命令詳細介紹
- Vmstat 命令詳細介紹
- MongoDB安全管理的三種方式介紹MongoDB
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- python字典詳細介紹Python
- Spring bean詳細介紹SpringBean
- Http Module 的詳細介紹HTTP
- Java異常詳細介紹Java
- 【SCN】Oracle SCN 詳細介紹Oracle
- SOLIDWORKS API詳細介紹SolidAPI
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- mysql binlog詳細介紹MySql
- java泛型詳細介紹Java泛型
- 【工具】Sublime使用詳細介紹
- asmcmd工具的詳細介紹ASM
- json詳細介紹(for Java)JSONJava
- Mysqldump工具的詳細介紹MySql
- rman超詳細命令介紹
- Aix 上NFS詳細介紹AINFS
- ApplicationContext 詳細介紹APPContext
- 部分雙機熱備軟體詳細介紹-行雲管家
- MongoDB介紹MongoDB
- Oracle 備份和恢復介紹Oracle
- mydumper備份工具介紹與使用
- Mysqldump備份的基本流程介紹MySql
- Oracle資料庫中的段管理方式詳細介紹 (3)Oracle資料庫
- TreeViewTemplate移動元件詳細介紹View元件
- pyhanlp 文字聚類詳細介紹HanLP聚類
- LVM詳細介紹及建立LVM