1. 程式人生 > >MongoDB 備份與還原 mongodump、mongorestore

MongoDB 備份與還原 mongodump、mongorestore

MongoDB 備份與還原 mongodump、mongorestore

目錄

MongoDB 備份與還原

一、 MongoDB 備份

MongoDB 備份的幾種方式:

1、mongodump

​ mongodump 是 MongoDB 官方提供的備份工具,它可以從 MongoDB 資料庫讀取資料,並生成 BSON 檔案,mongodump 適合用於備份和恢復資料量較小的 MongoDB 資料庫,不適用於大資料量備份。

​ 預設情況下 mongodump 不獲取 local 資料庫裡面的內容。

​ mongodump 僅備份資料庫中的文件,不備份索引,所以我們還原後,需要重新生成索引。

​ mongodump 備份過程中會對 mongod 服務的效能產生影響,我們建議在業務低峰期進行操作。如果我們備份的資料,大於系統記憶體,我們備份的時候容易出現錯誤。

在執行 mongodump 的時候,mongod 服務還是可以提供服務的,可以進行修改資料,如果我們在備份的時候加上引數 --oplog 的話,那麼 oplog 是會記錄這一次操作的,如果我們想在 restore 的時候也有日誌記錄,我們可以使用 mongorestore --oplogReplay 進行恢復

1.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 的操作,否則我們複製的檔案是無效的。

3、單節點意外關閉後,如何恢復資料

注意以下操作是針對單節點。

在意外關閉節點後,我們進行重新節點,發現有如下的日誌錯誤:

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檔案。而是,使用上述過程來恢復資料庫。在嚴峻的情況下,您可以刪除檔案,使用可能損壞的檔案啟動資料庫,並嘗試從資料庫中恢復資料,但這存在風險。

4、檢視備份資料

我們部分的資料都是二進位制的,我們直接檢視是檢視不到的,那麼我們可以通過工具 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"}}

二、MongoDB 還原

1、mongorestore特點

  • mongorestore 可以建立新的資料庫或將資料新增到現有的資料庫,但是 mongorestore 僅僅執行insert 操作,不執行 update操作。這就意味著如果將文件還原到現有的資料庫,現有的資料庫中的文件的_id的值和要還原的文件中的_id 值是一樣的,是不會將資料庫原有的值覆蓋的。
  • 重建索引,mongorestore 會重建索引。
  • mongorestore 不恢復 system.profile 的資料

2、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 # 指定還原資料儲存目錄。

3、還原示例

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 備份還原 mongodumpmongorestore

MongoDB 備份與還原 mongodump、mongorestore 目錄 MongoDB 備份與還原

mongodb備份還原

備份 rest body ack 文件 linux log oba dir linux系統下的備份還原兩條命令 1、./mongodump --host 127.0.0.1 --port 10001 -d 需備份的數據庫名 -o /home/mongodb/backup/m

瞧一瞧!這兒實現了MongoDB的增量備份還原(含部署程式碼)

一 需求描述 我們知道資料是公司的重要資產,業務的系統化、資訊化就是數字化。資料高效的儲存與查詢是系統完善和優化的方向,而資料庫的穩定性、可靠性是實現的基礎。高可用和RPO(RecoveryPointObjective,復原點目標,指能容忍的最大資料丟失量)是衡量一個數據庫優劣的重要指標。作為一個DBA,搭

mysql備份還原-mysqldump備份mysqlsource還原

註釋 命令 數據庫備份 event sin 提交 mas 數據庫 inno 以下都以在linux操作系統上的mysql為例 mysqldump備份 mysqldump實際就是將數據庫中的數據轉化為建庫、建表和插入記錄的sql語句 1.備份一個數據庫 [或其中幾個表],不指定

挖一挖MongoDB備份還原

一  研究背景需求 目前作者所在公司的MongoDB資料庫是每天凌晨做一次全庫完整備份,但資料庫出現故障時,只能保證恢復到全備時間點,比如,00:30 做的完整備份,而出現故障是下午18:00,那麼現有的備份機制只可以恢復到00:30,即丟失00:30 – 18:00 的操作資料。 此外,我們現在的副本集沒有

挖一挖MongoDB備份還原(實現指定時間點還原和增量備份還原

一  研究背景需求 目前作者所在公司的MongoDB資料庫是每天凌晨做一次全庫完整備份,但資料庫出現故障時,只能保證恢復到全備時間點,比如,00:30 做的完整備份,而出現故障是下午18:00,那麼現有的備份機制只可以恢復到00:30,即丟失00:30 – 18:00 的操

瞧一瞧!看一看!這兒實現了MongoDB的增量備份還原(含部署程式碼)

一 需求描述 我們知道資料是公司的重要資產,業務的系統化、資訊化就是數字化。資料高效的儲存與查詢是系統完善和優化的方向,而資料庫的穩定性、可靠性是實現的基礎。高可用和RPO(RecoveryPointObjective,復原點目標,指能容忍的最大資料丟失量)是衡量一個數據庫優劣的重要指標。作為一個DBA,搭建

ECShop後臺詳解-模組管理基本資訊設定商品展示促銷管理訂單管理文章管理報表統計資料備份還原

在ECShop後臺可進行商品管理、促銷管理、訂單管理、廣告管理、報表統計、文章管理、會員管理、模板管理、簡訊管理、資料庫管理等模組的設定。 模板管理 一個好的網店模板,首先會給人留下深刻的視覺印象。網店建設的精美不精美,模板扮演了十分重要的作用。當然,好的網店模板

Linux學習筆記19——XFS 檔案系統的備份還原光碟寫入工具其他常見的壓縮備份工具

一、XFS 檔案系統的備份與還原 使用 tar 通常是針對目錄樹系統來進行備份的工作,那麼如果想要針對整個檔案系統來進行備份與還原呢?由於 CentOS 7 已經使用 XFS 檔案系統作為預設值,所以那個好用的 xfsdump與 xfsrestore 兩個工具對 CentO

通過資料泵expdpimpdp方式備份還原(匯出匯入)Oracle資料庫

前言備份還原oracle資料庫的方式有很多種,本文只講解使用expdp、impdp資料泵方式備份與還原(恢復)資料庫,此種方式可以匯出/匯入資料庫表以及表中的資料。請自行修改目錄路徑,否則出現錯誤別怪我哦~一、備份step1:使用system登入oracle開啟DOS命令列介

MySQL備份還原

事務 總結 自然 rop systemctl 操作 示例 校驗 perl 一 理解MySQL備份與恢復 備份:存儲的數據副本;原始數據,持續改變。 恢復:把副本應用到線上系統;僅能恢復至備份操作時刻的數據狀態。 時間點恢復:binary logs。 為什麽備份?1.災難恢復

系統全盤備份還原

大白菜 mar 我們 iso isp clas 啟動 local 介紹 磁盤系統備份     大家應該都制作過啟動盤吧!!!如果沒有制作過啟動盤的,估計怕是看不懂的喲~~~~~ 市場上常見的pe啟動盤有很多種(大白菜、老毛桃、U大師等等),它們都是傻瓜式的非常簡單就可以安

mysql大數據備份還原(二)

mysql備份 還原 備份工具使用xtrabackup mysql大數據備份和增量備份及還原Xtrabackup實現是物理備份,而且是物理熱備目前主流的有兩個工具可以實現物理熱備:ibbackup和xtrabackup ;ibbackup是需要授權價格昂貴

SQL Server 2008數據備份還原的原理是什麽?

減少 備份類型 目標 大量 t-sql語句 不同 不能 -i 情況 為什麽SqlServer有完整備份、差異備份和事務日誌備份三種備份方式,以及為什麽數據庫又有簡單模式、完整模式和大容量日誌模式這三種恢復模式。本文內容適用於2005以上所有版本的SqlServer數據庫。

java操作數據庫定時備份還原

名稱 數據 rri att trac catch form number ride mysql每天23:00自動備份 public class DatabaseBackup { /** * * @param dbdir mysql數據

數據庫的備份還原

高級 font member fig 重啟 個數 config文件 ber 普通用戶 上周在維護考研的3個網站(心理、歷史、教育學)時,遇到了後臺網址登不進去的問題,大概是報的數據庫錯誤。 可以先到根目錄下找有沒有admin_loginxxx.aspx這個文件,從

Mongodb 備份恢復

mongodb 逗哥自動化 mongodb 備份與恢復 一、備份數據[email protected]/* */ ~]# mongodump -h localhost -d admin -o /home/qiuyuetao/ 2017-08-10T16:07:51.188+0800wr

[知了堂學習筆記]_Java代碼實現MySQL數據庫的備份還原

數據庫名 dsw -o string data except 文件夾 user lock 通常在MySQL數據庫的備份和恢復的時候,多是采用在cmd中執行mysql命令來實現。     例如:     mysqldump -h127.0.0.1 -uroot -ppas

MySQL(十四)之數據備份還原

pic 還原 mysql .com ace sql .cn uid 數據備份 http://pic.cnhubei.com/space.php?uid=4614&do=album&id=1719909http://pic.cnhubei.com/space.

mysql數據據備份還原

cron logs mysqld nta back kiss data oot username http://www.cnblogs.com/kissdodog/p/4174421.html備份:mysqldump -u username -p dbname > B