本文介绍如何通过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