MongoDB 邏輯還原工具mongorestore
阿新 • • 發佈:2020-07-07
mongorestore是官方提供用來還原匯入由mongodump匯出生成的二進位制備份檔案的工具,通常與mongodump配合使用,關於mongodump工具的使用可以參考另一篇博文:[**MongoDB 邏輯備份工具mongodump**][4]
主要概要說明與mongodump一致,本文同樣基於MongoDB 4.2 社群版本。
## 主要選項
通過執行選項`--help`選項獲得:
```sh
mongorestore --help
Usage:
mongorestore
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(通用選項)
```sh
--help # 列印工具使用方式,選項說明。
--version # 列印工具版本並退出。
```
### connection options(連線選項)
```sh
-h, --host= # 指定連線的例項主機名或者IP地址。
--port= # 指定連線的例項埠號。
```
- **Standalone(單例項)**
只指定選項`--host`
```sh
mongorestore --host="192.168.196.128:27017" dump/
```
同時指定選項`--host`和`--port`
```sh
mongorestore --host="192.168.196.128" --port=27017 dump/
```
- **Replica Set(副本集)**
對於副本集的連線,mongorestore總是連線副本集的主節點Primary。
```sh
mongorestore --host="dbabdSet/192.168.196.128:27017,192.168.196.128:27018,192.168.196.128:27019" dump/
```
也可以單獨指定副本集的Primary節點進行連線(同單例項的連線方式)。
### ssl options(安全連線選項)
```sh
--ssl
--sslCAFile=
--sslPEMKeyFile=
--sslPEMKeyPassword=
--sslCRLFile=
--sslAllowInvalidCertificates
--sslAllowInvalidHostnames
--sslFIPSMode
```
關於ssl安全加密協議連線,本文不過多的贅述,詳情可以參考官方文件:**[https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl][2]**。
### authentication options(驗證選項)
主要用於驗證連線例項的使用者的合法性。
```sh
-u, --username= # 指定連線使用者
-p, --password= # 指定連線使用者密碼
--authenticationDatabase= # 指定連線使用者驗證資料庫
--authenticationMechanism= # 指定連線驗證機制
```
注意:
如果需要在匯入時顯示指示輸入密碼,而不是直接寫在選項中,則在指定`--username`選項的同時,不指定`--password`或者為`--password`選項指定一個空值,如:**--password ""**。
### **kerberos options(kerboeros驗證選項)**
該選項主要是基於kerberos驗證機制的連線驗證選項,kerberos只有MongoDB企業版才支援,本文基於社群版本,有關kerberos可以參考官方文件:**[https://docs.mongodb.com/manual/core/kerberos/][3]**。
### namespace options(名稱空間選項)
主要是指定需要匯入還原的資料庫和集合。
```sh
-d, --db= # 指定從BSON檔案需要還原的資料庫名
-c, --collection= # 指定從BSON檔案需要還原的集合名
--excludeCollection= # 指定還原時需要排除的集合名,如多個可以多次指定
--excludeCollectionsWithPrefix= # 指定還原時需要排除的集合名字首
--nsExclude= # 指定還原時需要排除的名稱空間,可以理解為資料庫和集合組合過濾,如 "test.myCollection", "reporting.*", "dept*.bar"
--nsInclude= # 指定還原時需要包含的名稱空間,可以理解為資料庫和集合組合過濾
--nsFrom= # 指定接受名稱空間進行匹配還原,使用最少匹配原則
--nsTo= # 指定接受名稱空間進行匹配還原重新命名,使用最少匹配原則
```
注意:
選項`-d`和`-c`指定備份檔案需要還原成的資料庫名和集合名,如果例項中沒有對應資料庫或集合,則建立並還原匯入資料,當指定這兩個選項時,還原檔案必須為**BSON**格式的檔案,這兩個選項在未來更新的版本將會被廢棄,建議使用選項`--nsInclude`替代。
對於選項`--nsInclude`指定的名稱空間在備份檔案當中沒有對應的資料庫或集合,則資料不會被還原匯入。
選項`--nsFrom`和`--nsTo`主要是為了在還原時改變備份檔案中的資料庫和集合原來的名稱空間,一般這兩個選項結合著使用。
### input options(輸入選項)
影響mongorestore匯入時的行為選項。
```sh
--objcheck # 指定在還原插入物件時進行校驗合法性
--oplogReplay # 指定還原後回放oplog達到完整基於時間點的還原
--oplogLimit=[:ordinal] # 指定oplog還原開始的時間戳
--oplogFile= # 指定需要進行回放的oplog檔案
--archive= # 指定需要進行還原的歸檔檔案,如果不指定值,則該選項值預設獲取標 準輸入值
--restoreDbUsersAndRoles # 指定還原資料庫中關於使用者名稱和角色定義
--dir= # 指定還原的目錄,'-' 為標準輸入
--gzip # 指定對採用壓縮格式儲存的匯入檔案進行解壓
```
注意:
如果備份檔案為歸檔檔案型別並且進行了壓縮,則在還原時需要同時指定選項`--archive`和`--gzip`。
### restore options(還原選項)
主要為mongorestore還原匯入選項。
```sh
--drop # 指定匯入集合資料時先刪除原集合
--dryRun # 指定進行預匯入,不進行真正的還原匯入操作
--writeConcern= # 指定匯入資料時的寫入優先順序,如--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輸出的顯示的詳細級別。
```sh
-v, --verbose= # 指定日誌輸出詳細級別,如:-vvvvv 或 指定數值
--quiet # 指定不輸出任何日誌資訊
```
## 使用示例
### 還原所有資料庫
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --dir /data/mongodump/full/
```
### 還原指定資料庫
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsInclude=dbabd.* --dir /data/mongodump/full/
```
### 還原指定資料庫和指定集合
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsInclude=dbabd.orders --dir /data/mongodump/full/
```
或
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck -d dbabd --dir /data/mongodump/full/dbabd/orders.bson
```
或
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck -d dbabd -c orders --dir /data/mongodump/full/dbabd/orders.bson
```
### 指定排除一個或多個集合進行還原
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --excludeCollection=orders --dir /data/mongodump/full/
```
或
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --nsExclude=dbabd.orders --dir /data/mongodump/full/
```
### 還原壓縮格式的備份
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip --nsInclude=dbabd.orders --dir /data/mongodump/gzip/
```
或
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin --objc
heck --gzip -d dbabd --dir /data/mongodump/gzip/dbabd/orders.bson.gz
```
或
```sh
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
```
### 還原以歸檔檔案形式存在的備份
```sh
mongorestore -h"192.168.196.128:27017" -uroot --authenticationDatabase admin -
-objcheck --nsInclude=dbabd.orders --archive=/data/mongodump/dbabd_orders.archive
```
### 還原集合時如果存在先清除原集合
```sh
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**][1]
[**https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl**][2]
[**https://docs.mongodb.com/manual/core/kerberos**][3]
[**https://www.cnblogs.com/dbabd/p/13139556.html**][4]
**☆〖本人水平有限,文中如有錯誤還請留言批評指正!〗☆**
[1]:https://docs.mongodb.com/database-tools/mongorestore/
[2]:https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-ssl
[3]:https://docs.mongodb.com/manual/core/kerberos
[4]:https://www.cnblogs.com/dbabd/p/13139