MongoDB備份與恢復

轉自:https://www.cnblogs.com/shilin000/p/5248177.htmlhtml

   https://www.cnblogs.com/timelesszhuang/p/5906068.htmlmongodb

 

mongodb的備份有兩種方式:shell

1.直接拷貝數據目錄下的一切文件數據庫

2.使用mongodump方式json

3.主從複製:http://www.cnblogs.com/huangxincheng/archive/2012/03/04/2379755.html  (這篇詳細介紹了主從複製)服務器

下面一一說明:less

1.直接拷貝數據目錄下的一切文件:ide

這種方式用來備份整個mongodb的數據庫,不能備份單個數據庫或者集合或者子集合post

在拷貝過程當中必須阻止數據文件發生更改。所以須要對數據庫加鎖,以防止數據寫入.spa

db.fsyncLock()

上面的命令將阻塞寫入操做,並將髒數據刷新到磁盤上,確保數據一致。
而後,拷貝數據文件到備份目錄下

cp -R /data/db/* /backup

文件複製完成後,對數據庫進行解鎖,容許寫操做

 db.fsyncUnlock()

注意: 在執行db.fsyncLock()和db.fsyncUnlock()時,不能關閉當前的shell窗口,不然可能沒法鏈接而須要從新啓動mongod服務。

恢復時,確保mongod沒有運行,清空數據目錄,將備份的數據拷貝到數據目錄下,而後啓動mongod

cp -R /backup/* /data/db/
mongod -f mongod.conf

2.使用mongodump方式:

千萬不要fsyncLock與mongodump配合使用,若是數據庫被鎖定了,mongodump將永遠掛起。 

使用mongodump備份比較慢,在備份複製集時還有些問題,後續會說到。可是,用來備份單個數據庫、集合、子集合仍是比較好的方法。

  • 首先數據庫備份: mongodump -h IP --port 端口 -u 用戶名 -p 密碼 -d 數據庫 -o 文件存在路徑 
mongodump -h 127.0.0.1 -u admin -p xxx  -d blog -o '/home/timeless/桌面/mongodump' --authenticationDatabase admin
注意  --authenticationDatabase  參數制定認證數據庫   不然會提示錯誤:
Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed.   //提示認證失敗
複製代碼
# ./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
複製代碼

經常使用的是:mongodump -h 主機 -u 用戶名 -p 密碼 -d 數據庫 -c 集合 -o 備份目錄

mongodb恢復時採用mongorestore來恢復

複製代碼
# ./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
複製代碼

恢復整個mongodb的數據庫:

mongorestore -p 27017 dump/

恢復到特定的庫和集合:

mongorestore --db ttlsa_com --collection posts dump/old_ttlsa_com/old_posts.bson

注意: mongodump和mongorestore版本最好相匹配。

相關文章
相關標籤/搜索