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