linux下的mongodb的備份與恢復


mongodb的備份有兩種方式:

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

2.使用mongodump方式

3.主從復制:http://www.cnblogs.com/huangxincheng/archive/2012/03/04/2379755.html  (這篇詳細介紹了主從復制)

下面一一說明:

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

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

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

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備份比較慢,在備份復制集時還有些問題,后續會說到。但是,用來備份單個數據庫、集合、子集合還是比較好的方法。

/usr/local/mongodb/bin/mongodump -h 127.0.0.1 -d log-idp-mongo -o /databack_data1/backups/${DATE}
/usr/local/mongodb/bin/mongodump -h 127.0.0.1 -d log-hra-mongo -o /databack_data1/backups/${DATE}[root@mongo ~]# 
# ./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版本最好相匹配。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM