MongoDB 備份與還原 mongodump、mongorestore

MongoDB 備份與還原 mongodump、mongorestore

目錄html

MongoDB 備份與還原

1、 MongoDB 備份

MongoDB 備份的幾種方式:算法

一、mongodump

​ mongodump 是 MongoDB 官方提供的備份工具,它能夠從 MongoDB 數據庫讀取數據,並生成 BSON 文件,mongodump 適合用於備份和恢復數據量較小的 MongoDB 數據庫,不適用於大數據量備份。mongodb

​ 默認狀況下 mongodump 不獲取 local 數據庫裏面的內容。數據庫

​ mongodump 僅備份數據庫中的文檔,不備份索引,因此咱們還原後,須要從新生成索引。json

​ mongodump 備份過程當中會對 mongod 服務的性能產生影響,咱們建議在業務低峯期進行操做。若是咱們備份的數據,大於系統內存,咱們備份的時候容易出現錯誤。併發

在執行 mongodump 的時候,mongod 服務仍是能夠提供服務的,能夠進行修改數據,若是咱們在備份的時候加上參數 --oplog 的話,那麼 oplog 是會記錄這一次操做的,若是咱們想在 restore 的時候也有日誌記錄,咱們可使用 mongorestore --oplogReplay 進行恢復運維

1.一、mongodump經常使用命令和參數

官方文檔:mongodump工具

mongodump 默認輸出的目錄名爲 dump ,若是輸出路徑包含 dump 目錄,會直接覆蓋的。 默認備份是沒有壓縮的。性能

參數:學習

--host <hostname><:port>, -h <hostname><:port>  # 指定備份的主機ip和端口號,默認值localhost:27017
--port # 指定端口號 默認27017

--username <username>, -u <username> # 指定用戶名
--password <password>, -p <password> # 指定密碼
--authenticationDatabase <dbname> # 指定認證的數據庫
--authenticationMechanism <name> # 指定認證的算法 ,默認值 SCRAM-SHA-1
--db <database>, -d <database> # 指定備份的數據庫,未指定的話,備份全部的數據庫,但不包含local庫
--collection <collection>, -c <collection> # 指定備份的集合,未指定則備份指定庫中的全部集合。
--query <json>, -q <json>  # 指定 json 做爲查詢條件。來備份咱們過濾後的數據。
--queryFile <path>  # 指定 json 文檔路徑,以該文檔的內容做爲查詢條件,來備份咱們過濾後的數據。
--quit # 經過抑制 MongoDB的複製,鏈接等活動,來實現備份。
--gzip  # 開啓壓縮,3.2版本後可使用,輸出爲文件的話會帶有後綴.gz
--out <path>, -o <path>  # 輸出的目錄路徑

--repir # 修復數據時使用 下面有詳細介紹
--oplog # mongodump 會將 mongodump 執行期間的 oplog 日誌 輸出到文件 oplog.bson,這就意味着從備份開始到備份結束的數據操做咱們均可以記錄下來。
--archive <file> # 輸出到單個存檔文件或者是直接輸出。


--dumpDbUsersAndRoles # 只有在 使用 --db 時才適用,備份數據庫的包含的用戶和角色。
--excludeCollection string # 排除指定的集合,若是要排除多個,使用多個--excludeCollection 
--numParallelCollections int, -j int # 並行導出的集合數,默認爲4


--ssl  # 指定 TLS/SSL 協議
--sslCAFile filename # 指定認證文件名
--sslPEMKeyFile <filename>
--sslPEMKeyPassword <value>
--sslCRLFile <filename>
--sslAllowInvalidCertificates
--sslAllowInvalidHostnames
--sslFIPSMode

示例:

  1. 排除指定的集合

    mongodump  --db test --excludeCollection=users --excludeCollection=salaries
  2. 指定ip,端口,用戶名,認證,壓縮,輸出目錄

    mongodump --host mongodb1.example.net --port 37017 --username user --password "pass" --gzip --out /opt/backup/mongodump-2019-04-17

1.2 、注意

當咱們的刪除一個集合的數據,這個集合有10000條數據,那麼在 Oplog 裏面也是會有 10000條刪除記錄。

這樣的操做就會致使 Oplog 裏面的以前的操做記錄會被快速覆蓋。

因此咱們在備份的時候,須要注意 備份的間隔時間 和 Oplog 記錄被覆蓋的時間(也就是 Oplog 記錄了多長時間的日誌 )。要後者大於前者。

示例:

​ 咱們的備份計劃是,天天備份一次數據,Oplog 記錄的保持時間要大於1天。

Oplog 的開啓是須要開啓副本集才能開啓的,因此以上備份策略是針對副本集。

2 、cp 或者rsync

​ 咱們能夠直接複製數據文件,可是咱們必須在複製文件前中止對 MongoDB 的操做,不然咱們複製的文件是無效的。

三、單節點意外關閉後,如何恢復數據

注意如下操做是針對單節點。

在乎外關閉節點後,咱們進行從新節點,發現有以下的日誌錯誤:

2018-10-24T18:05:18.248-0400 W STORAGE  [initandlisten] Detected unclean shutdown - mongod.lock is not empty.

...

2018-10-24T17:24:53.122-0400 E STORAGE  [initandlisten] Failed to get the cursor for uri: table:collection-2-6854866147293273505
2018-10-24T17:24:53.122-0400 E STORAGE  [initandlisten] This may be due to missing data files. ...

...

***aborting after fassert() failure

而且在 數據儲存路徑中有一個 mongod.lock 文件。

咱們可使用 mongod --repair 來恢復數據。

在MongoDB中4.0.3,對 WiredTiger 引擎,使用該命令會進行如下操做

  • 重建全部索引
  • 丟棄損壞的數據
  • 爲殘缺的元數據建立存根文件。

對於MMAPv1 引擎

  • 重建全部索引
  • 丟棄損壞的數據

數據恢復流程:

  1. 先備份現有的數據

    咱們能夠用 cp 命令將現有的數據的整個目錄的全部文件都備份一份。

  2. 使用 mongod --repair

    # 針對 全部數據庫
    mongod --repair 
    # 針對 單個數據庫
    mongod --dbpath /opt/mongodb/data/djx  --repair

通常狀況下,你不該該手動刪除該mongod.lock文件。而是,使用上述過程來恢復數據庫。在嚴峻的狀況下,您能夠刪除文件,使用可能損壞的文件啓動數據庫,並嘗試從數據庫中恢復數據,但這存在風險。

四、查看備份數據

咱們部分的數據都是二進制的,咱們直接查看是查看不到的,那麼咱們能夠經過工具 bsondump(安裝 MongoDB 自帶了) 來進行查看。

[root@djx uu_dev]# bsondump  order_detail.bson
2019-04-17T16:14:51.430+0800    549 objects found
{"_id":{"$oid":"5cae98d0f23d932dscdfc2ff"}}
{"_id":{"$oid":"5cae98d0f23d932dscdfca00"}}
{"_id":{"$oid":"5cae98d1f23d932dscdfca31"}}
{"_id":{"$oid":"5cae98d1f23d932dscdfca32"}}

2、MongoDB 還原

一、mongorestore特色

  • mongorestore 能夠建立新的數據庫或將數據添加到現有的數據庫,可是 mongorestore 僅僅執行insert 操做,不執行 update操做。這就意味着若是將文檔還原到現有的數據庫,現有的數據庫中的文檔的_id的值和要還原的文檔中的_id 值是同樣的,是不會將數據庫原有的值覆蓋的。
  • 重建索引,mongorestore 會重建索引。
  • mongorestore 不恢復 system.profile 的數據

二、mongorestore 經常使用參數

--help # 查看幫助
--quiet # 經過抑制 MongoDB的複製,鏈接等活動,來實現數據恢復。

--host <hostname><:port>, -h <hostname><:port>  # 指定恢復的主機ip和端口號,默認值localhost:27017
--port # 指定端口號 默認27017

--username <username>, -u <username> # 指定用戶名
--password <password>, -p <password> # 指定密碼
--authenticationDatabase <dbname> # 指定認證的數據庫
--authenticationMechanism <name> # 指定認證的算法 ,默認值 SCRAM-SHA-1
--objcheck # 開啓驗證,驗證還原操做,確保沒有無效的文檔插入數據庫。會有較小的性能影響
--oplogReplay # 恢復備份數據並將 mongodump 執行期間的操做(記錄在導出的日誌)恢復。
--oplogLimit  # 指定恢復
--oplogFile # 指定 Oplog 路徑
--keepIndexVersion # 阻止mongorestore在還原過程當中將索引升級到最新版本。
--restoreDbUsersAndRoles # 還原指定的數據庫用戶和角色。
--maintainInsertionOrder # 默認值爲False,若是爲 True,mongorestore 將按照輸入源的文檔順序插入,不然是 隨機執行插入。
--numParallelCollections int, -j int # 指定並行恢復的集合數。
--numInsertionWorkersPerCollection int # 默認值爲 1,指定每一個集合恢復的併發數,大數據量導入增長該值可提升 恢復速度。
--gzip # 從壓縮文檔中 恢復。
--archive # 從歸檔文件中恢復。
--dir # 指定還原數據儲存目錄。

三、還原示例

mongorestore --collection people --db accounts dump/
mongorestore --host mongodb1.example.net --port 37017 --username user --password "pass" /opt/backup/mongodump-2011-10-24
mongorestore --gzip --archive=test.20150715.gz --db test
mongorestore --archive=test.20150715.archive --db test

做者:理想三旬

    

出處:https://www.cnblogs.com/operationhome/

若是以爲文章寫得不錯,或者幫助到您了,請點個贊,加個關注哦。運維學習交流羣:544692191

本文版權歸做者全部,歡迎轉載,若是文章有寫的不足的地方,或者是寫得錯誤的地方,請你必定要指出,由於這樣不光是對我寫文章的一種促進,也是一份對後面看此文章的人的責任。謝謝。

分類: mongodb

相關文章
相關標籤/搜索