本文介紹如何通過Mongorestore將云數據庫MongoDB實例的邏輯備份文件恢復至自建MongoDB數據庫中。
前提條件
- 實例存儲類型為SSD本地盤。
- 為保障兼容性,自建MongoDB數據庫和云數據庫MongoDB實例的數據庫版本相同。
背景信息
MongoDB提供了一組官方備份恢復工具,分別是Mongodump和Mongorestore。云數據庫MongoDB的邏輯備份通過Mongodump生成,當您需要將邏輯備份恢復到自建MongoDB數據庫時可以通過Mongorestore進行恢復。注意事項
- 由于MongoDB一直在迭代更新,舊版本的Mongorestore不能兼容新版本的MongoDB。請選擇合適的Mongorestore版本,以兼容MongoDB,如何選擇Mongorestore版本,請參見mongorestore。
- 當自建數據庫是分片集群時,導入數據命令中的
<hostname>
參數需填寫為自建數據庫中Mongos組件的地址。 - 當自建數據庫是分片集群時,導入數據命令中必須添加
--nsExclude="config.*"
,否則數據恢復過程可能會出現報錯。 - 將分片集群實例中的數據恢復至自建數據庫時,需要下載分片集群實例中每個Shard組件的備份數據并導入到自建數據庫。當分片集群實例存在孤立文檔(Orphaned Document)時,自建數據庫中可能會出現臟數據。恢復多個Shard的備份到同一個分片集群的時候,僅恢復第一個Shard備份時需使用drop參數。
準備工作
下載并安裝與云數據庫MongoDB實例數據庫版本相同的MongoDB至自建MongoDB數據庫所在客戶端(本地服務器或云服務器ECS實例),安裝方法請參見Install MongoDB。
操作步驟
- 登錄MongoDB管理控制臺。
- 根據實例類型,在左側導航欄,單擊副本集實例列表或分片集群實例列表。
- 在頁面左上角,選擇實例所在的資源組和地域。
- 單擊目標實例ID或目標實例所在行操作列的管理。
- 備份數據庫。
- 在目標實例頁面右上方,單擊備份實例。
- 在備份實例 面板,選擇備份方法 為邏輯備份。
- 單擊確定,等待實例備份完成。
- 下載備份文件,下載方法請參見下載備份文件。
- 將下載的備份文件復制到自建MongoDB所在客戶端(即安裝有Mongorestore工具的客戶端)。
- 執行如下命令,將備份文件中的數據導入至自建MongoDB數據庫中。
mongorestore -h <hostname> --port <server port> -u <username> -p <password> --drop --gzip --archive=<backupfile> -vvvv --stopOnError
您需要修改如下參數:- <hostname> :自建MongoDB數據庫所屬的服務器地址,本機可填寫127.0.0.1。
當自建數據庫是分片集群時,該參數需填寫為自建數據庫中Mongos組件的地址。
- <server port>:自建MongoDB數據庫的數據庫端口。
- <username>:登錄自建MongoDB數據庫的數據庫用戶名,請確保該用戶擁有所有庫的權限,建議使用root賬號。
- <password>:登錄自建MongoDB數據庫的數據庫密碼。
- <backupfile>:下載的邏輯備份文件名。
命令參數無需修改,說明如下:- --drop:在恢復備份文件之前,刪除集合。說明 當恢復多個Shard的備份到同一個分片集群的時候,僅恢復第一個Shard備份時需使用該參數。
- --gzip:備份文件中的數據是以gzip形式壓縮過的,需要先解壓。說明 此參數從MongoDB 3.1.4版本開始支持,更多信息,請參見mongo-tools。
- -vvvv:備份文件輸出的詳細程度,v越多,備份文件的數據越詳細。
- --stopOnError:導入過程中遇到任何錯誤后,都會停止導入數據。
- --nsExclude:不恢復匹配成功的數據集合。例如
--nsExclude="config.*"
。
示例:
mongorestore -h 127.0.0.1 --port 27017 -u root -p ******** --drop --gzip --archive=hins1111_data_20190710.ar -vvvv --stopOnError
- <hostname> :自建MongoDB數據庫所屬的服務器地址,本機可填寫127.0.0.1。