MongoDB 邏輯還原工具mongorestore

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安全加密協議連接,本文不過多的贅述,詳情可以參考官方文檔://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可以參考官方文檔://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如出一轍,在較大數據量的實例還原消耗的時間過長,同時重建索引也比較令人頭疼。

參考

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

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

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

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

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

Tags: