標籤: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備份與恢複