MongoDB備份與恢複

來源:互聯網
上載者:User

標籤:scan   sas   repair   訪問   重新整理   代碼   -objc   default   esc   

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

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

 

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

  • 首先Database Backup: 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 --helpoptions:  --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版本最好相匹配。

MongoDB備份與恢複

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.