本文介紹如何通過Mongorestore將云數據庫MongoDB實例的邏輯備份文件恢復至自建MongoDB數據庫中。

前提條件

  • 實例存儲類型為SSD本地盤
  • 為保障兼容性,自建MongoDB數據庫和云數據庫MongoDB實例的數據庫版本相同。

背景信息

MongoDB提供了一組官方備份恢復工具,分別是MongodumpMongorestore。云數據庫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

操作步驟

  1. 登錄MongoDB管理控制臺
  2. 根據實例類型,在左側導航欄,單擊副本集實例列表分片集群實例列表
  3. 在頁面左上角,選擇實例所在的資源組和地域。
  4. 單擊目標實例ID或目標實例所在行操作列的管理
  5. 備份數據庫。
    1. 在目標實例頁面右上方,單擊備份實例
    2. 備份實例 面板,選擇備份方法 邏輯備份
    3. 單擊確定,等待實例備份完成。
  6. 下載備份文件,下載方法請參見下載備份文件
  7. 將下載的備份文件復制到自建MongoDB所在客戶端(即安裝有Mongorestore工具的客戶端)。
  8. 執行如下命令,將備份文件中的數據導入至自建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