天天看點

MongoDB 邏輯還原工具mongorestore

MongoDB 邏輯還原工具mongorestore

2020-07-07 10:08 

H_Johnny 

閱讀(...) 

評論(...) 

編輯 

收藏

mongorestore是官方提供用來還原導入由mongodump導出生成的二進制備份檔案的工具,通常與mongodump配合使用,關于mongodump工具的使用可以參考另一篇博文:MongoDB 邏輯備份工具mongodump

主要概要說明與mongodump一緻,本文同樣基于MongoDB 4.2 社群版本。

主要選項

通過執行選項

--help

選項獲得:

mongorestore --help
Usage:
  mongorestore <options> <directory or file to restore>

Restore backups generated with mongodump to a running server.
           

選項分為幾個大類:

  • general options:通用選項
  • connection options:連接配接選項
  • ssl options:安全連接配接選項
  • authentication options:驗證選項
  • kerberos options:基于kerboeros驗證選項
  • namespace options:命名空間選項
  • uri options:mongodb uri連接配接串選項
  • input options:輸入選項
  • restore options:還原選項
  • verbosity options:顯示選項

general options(通用選項)

--help      # 列印工具使用方式,選項說明。
--version   # 列印工具版本并退出。
           

connection options(連接配接選項)

-h, --host=<hostname>   # 指定連接配接的執行個體主機名或者IP位址。                                 
    --port=<port>       # 指定連接配接的執行個體端口号。                                 
           
  • Standalone(單執行個體)

隻指定選項

--host

mongorestore --host="192.168.196.128:27017" dump/
           

同時指定選項

--host

--port

mongorestore --host="192.168.196.128" --port=27017 dump/
           
  • Replica Set(副本集)

對于副本集的連接配接,mongorestore總是連接配接副本集的主節點Primary。

mongorestore --host="dbabdSet/192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019" dump/
           

也可以單獨指定副本集的Primary節點進行連接配接(同單執行個體的連接配接方式)。

ssl options(安全連接配接選項)

--ssl                                                
--sslCAFile=<filename>                               
--sslPEMKeyFile=<filename>                            
--sslPEMKeyPassword=<password>                        
--sslCRLFile=<filename>                               
--sslAllowInvalidCertificates          
--sslAllowInvalidHostnames
--sslFIPSMode
           

關于ssl安全加密協定連接配接,本文不過多的贅述,詳情可以參考官方文檔:https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl。

authentication options(驗證選項)

主要用于驗證連接配接執行個體的使用者的合法性。

-u, --username=<username>                   # 指定連接配接使用者
-p, --password=<password>                   # 指定連接配接使用者密碼
--authenticationDatabase=<database-name>    # 指定連接配接使用者驗證資料庫
--authenticationMechanism=<mechanism>       # 指定連接配接驗證機制
           

注意:

如果需要在導入時顯示訓示輸入密碼,而不是直接寫在選項中,則在指定

--username

選項的同時,不指定

--password

或者為

--password

選項指定一個空值,如:--password ""。

kerberos options(kerboeros驗證選項)

該選項主要是基于kerberos驗證機制的連接配接驗證選項,kerberos隻有MongoDB企業版才支援,本文基于社群版本,有關kerberos可以參考官方文檔:https://docs.mongodb.com/manual/core/kerberos/。

namespace options(命名空間選項)

主要是指定需要導入還原的資料庫和集合。

-d, --db=<database-name>                            # 指定從BSON檔案需要還原的資料庫名
-c, --collection=<collection-name>                  # 指定從BSON檔案需要還原的集合名
--excludeCollection=<collection-name>               # 指定還原時需要排除的集合名,如多個可以多次指定
--excludeCollectionsWithPrefix=<collection-prefix>  # 指定還原時需要排除的集合名字首
--nsExclude=<namespace-pattern>                     # 指定還原時需要排除的命名空間,可以了解為資料庫和集合組合過濾,如                                                       "test.myCollection", "reporting.*", "dept*.bar"
--nsInclude=<namespace-pattern>                     # 指定還原時需要包含的命名空間,可以了解為資料庫和集合組合過濾
--nsFrom=<namespace-pattern>                        # 指定接受命名空間進行比對還原,使用最少比對原則
--nsTo=<namespace-pattern>                          # 指定接受命名空間進行比對還原重命名,使用最少比對原則
           

注意:

選項

-d

-c

指定備份檔案需要還原成的資料庫名和集合名,如果執行個體中沒有對應資料庫或集合,則建立并還原導入資料,當指定這兩個選項時,還原檔案必須為BSON格式的檔案,這兩個選項在未來更新的版本将會被廢棄,建議使用選項

--nsInclude

替代。

對于選項

--nsInclude

指定的命名空間在備份檔案當中沒有對應的資料庫或集合,則資料不會被還原導入。

選項

--nsFrom

--nsTo

主要是為了在還原時改變備份檔案中的資料庫和集合原來的命名空間,一般這兩個選項結合着使用。

input options(輸入選項)

影響mongorestore導入時的行為選項。

--objcheck                                           # 指定在還原插入對象時進行校驗合法性
--oplogReplay                                        # 指定還原後回放oplog達到完整基于時間點的還原
--oplogLimit=<seconds>[:ordinal]                     # 指定oplog還原開始的時間戳
--oplogFile=<filename>                               # 指定需要進行回放的oplog檔案
--archive=<filename>                                 # 指定需要進行還原的歸檔檔案,如果不指定值,則該選項值預設擷取标														 準輸入值
--restoreDbUsersAndRoles                             # 指定還原資料庫中關于使用者名和角色定義
--dir=<directory-name>                               # 指定還原的目錄,'-' 為标準輸入
--gzip                                               # 指定對采用壓縮格式儲存的導入檔案進行解壓
           

注意:

如果備份檔案為歸檔檔案類型并且進行了壓縮,則在還原時需要同時指定選項

--archive

--gzip

restore options(還原選項)

主要為mongorestore還原導入選項。

--drop                                               # 指定導入集合資料時先删除原集合
--dryRun                                             # 指定進行預導入,不進行真正的還原導入操作
--writeConcern=<write-concern>                       # 指定導入資料時的寫入優先級,如--writeConcern majority,                                                        --writeConcern '{w:3, wtimeout: 500, fsync: true,                                                        j: true}'
--noIndexRestore                                     # 指定還原不導入索引
--convertLegacyIndexes                               # 指定導入時移除失效索引,并且重建索引
--noOptionsRestore                                   # 阻止mongorestore對已還原的集合執行收集選項操作
--keepIndexVersion                                   # 阻止mongorestore還原時更新已存在的索引版本
--maintainInsertionOrder                             # 指定還原導入時插入文檔的順序性
-j, --numParallelCollections=                        # 指定還原導入集合并行度,預設值:4
--numInsertionWorkersPerCollection=                  # 指定還原導入每個集合插入操作并行度,預設值:1
--stopOnError                                        # 指定還原導入時出現錯誤後中止執行,少量文檔還是有可能插入
--maintainInsertionOrder                             # 指定還原導入時出現錯誤後立刻中止執行
--bypassDocumentValidation                           # 指定跳過文檔的合法性校驗
--preserveUUID                                       # 指定還原導入時保持集合原始的UUIDS
           

注意:

--drop

選項指定在還原導入集合時先删除原先執行個體中存在的同名集合,該選項不會在運作執行個體中删除備份檔案中沒有的資料庫或集合。

--maintainInsertionOrder

選項從版本4.2開始引入,如果指定該選項,mongorestore在還原導入文檔時以實際導出時的插入順序一緻,這其中包括批量寫文檔的順序以及在批量中文檔的插入順序,在早期版本中隻能保證批量寫文檔的順序。如果指定該選項同時也指定了選項

--stopOnError

和設定選項

--numInsertionWorkersPerCollection = 1

,預設值:false。

--numParallelCollections

選項指定還原時插入集合的并行數,預設值:4。

--numInsertionWorkersPerCollection

選項指定還原導入目前集合的插入工作程序數,預設值:1。

--stopOnError

選項指定在mongorestore還原導入時一出錯就中止,預設情況下, 當mongorestore遇到主鍵重複或文檔較驗失敗等錯誤時,導入程序并不會中止。

verbosity options(顯示選項)

指定導出時log輸出的顯示的詳細級别。

-v, --verbose=<level>  # 指定日志輸出詳細級别,如:-vvvvv 或 指定數值
--quiet                # 指定不輸出任何日志資訊
           

使用示例

還原所有資料庫

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --dir /data/mongodump/full/
           

還原指定資料庫

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsInclude=dbabd.* --dir /data/mongodump/full/
           

還原指定資料庫和指定集合

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsInclude=dbabd.orders --dir /data/mongodump/full/
           

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck -d dbabd --dir /data/mongodump/full/dbabd/orders.bson
           

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck -d dbabd -c orders --dir /data/mongodump/full/dbabd/orders.bson
           

指定排除一個或多個集合進行還原

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --excludeCollection=orders --dir /data/mongodump/full/
           

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsExclude=dbabd.orders --dir /data/mongodump/full/
           

還原壓縮格式的備份

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip --nsInclude=dbabd.orders --dir /data/mongodump/gzip/
           

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip -d dbabd --dir /data/mongodump/gzip/dbabd/orders.bson.gz
           

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip -d dbabd -c orders --dir /data/mongodump/gzip/dbabd/orders.bson.gz
           

還原以歸檔檔案形式存在的備份

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -
-objcheck --nsInclude=dbabd.orders --archive=/data/mongodump/dbabd_orders.archive
           

還原集合時如果存在先清除原集合

mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --drop --objc
heck --dir /data/mongodump/full/
           

注意

mongorestore在還原導入過程中隻執行插入操作,并不執行更新操作,如果還原導入已存在的執行個體中的資料庫或集合有已存在相同

_id

的文檔,mongorestore并不會覆寫。

mongorestore不導入system.profile集合資料。

對于開啟了通路控制機制的執行個體,mongorestore要執行還原導入操作的話至少需要具有restore角色權限。

總結

本文簡要梳理了MongoDB邏輯備份還原工具mongorestore的使用,mongorestore主要是與mongodump進行搭配,面對的問題也與mongodump如出一轍,在較大資料量的執行個體還原消耗的時間過長,同時重建索引也比較令人頭疼。

參考

https://docs.mongodb.com/database-tools/mongorestore

https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl

https://docs.mongodb.com/manual/core/kerberos

https://www.cnblogs.com/dbabd/p/13139556.html

☆〖本人水準有限,文中如有錯誤還請留言批評指正!〗☆

  • 分類 MongoDB
  • 标簽 MongoDB