
# 通过mongoexport和mongoimport工具迁移数据
mongoexport和mongoimport是MongoDB客户端自带的备份恢复工具。您可以在本地设备或ECS中安装MongoDB客户端，通过mongoexport和mongoimport工具将自建MongoDB数据库或其他云数据库MongoDB迁移至华为云GeminiDB Mongo 实例。
要将已有的MongoDB数据库迁移到GeminiDB Mongo 数据库，需要先使用mongoexport工具对它做转储。再通过弹性云服务器或可访问GeminiDB Mongo 数据库的设备，使用mongoimport工具将转储文件导入到GeminiDB Mongo 数据库。
#### 使用须知
- mongoexport和mongoimport工具仅支持全量数据迁移。为保障数据一致性，迁移操作开始前请停止源数据库的相关业务，并停止数据写入。
- 建议您尽量选择在业务低峰期迁移数据，避免在迁移过程中对业务造成影响。
- 不支持迁移系统库admin和local。
- 确保源库中系统库admin和local没有创建业务集合，如果已经有业务集合，必须在迁移前将这些业务集合从admin和local库中迁移出来。
- 导入数据之前，确保源端有必要的索引，即在迁移前删除不需要的索引，创建好必要的索引。
- 如果选择迁移分片集群，必须在目标库创建好要分片的集合，并配置数据分片。同时，迁移前必须要创建好索引。
 
#### 前提条件
1. 准备弹性云服务器或可访问GeminiDB Mongo 数据库的设备。
   - 通过内网连接GeminiDB Mongo数据库实例，需要创建并登录弹性云服务器，请参见[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)和[登录弹性云服务器](https://support.huaweicloud.com/ecs_faq/ecs_faq_0632.html)。
   
   - 通过公网地址连接GeminiDB Mongo数据库实例，需具备以下条件。
     1. 为实例中的节点绑定公网地址，如何绑定公网地址，请参见[绑定或解绑公网网关地址](https://support.huaweicloud.com/mongoug-nosql/zh-cn_topic_0000002541471247.html)。
     
     2. 保证本地设备可以访问GeminiDB Mongo 数据库绑定的公网地址。
      
    
2. 在已准备的弹性云服务器或可访问GeminiDB Mongo 数据库的设备上，安装数据迁移工具。 安装数据迁移工具，请参见[如何安装MongoDB客户端](https://support.huaweicloud.com/mongoug-nosql/mongo_faq_0023.html)。
   ![](https://support.huaweicloud.com/mongoug-nosql/public_sys-resources/note_3.0-zh-cn.png)
   MongoDB客户端会自带mongoexport和mongoimport工具。
   
 
#### 导出源库数据
1. 登录到已准备的弹性云服务器或可访问源数据库的设备。
2. 使用mongoexport，将源数据库转储至JSON文件。 
   此处以SSL连接方式为例进行说明，如果选择普通连接方式，去掉命令中对应的"--ssl --sslAllowInvalidCertificates"即可。
   ./**mongoexport** **--host** *\<* *DB_ADDRESS\>* ***--*port** *\<DB_PORT\>* ***--*ssl** **--sslAllowInvalidCertificates** **--type json** **--authenticationDatabase** *\<AUTH_DB* \> **-u** *\<DB_USER\>* **--db** \<*DB_NAME* \> **--collection** \<*DB_COLLECTION* \> **--out** \<*DB_PATH*\>
   表1参数说明 
   | 参数名称          | 说明                        |
   |:---|:---|
   | DB_ADDRESS    | 数据库地址。                    |
   | DB_PORT       | 数据库端口。                    |
   | AUTH_DB       | 存储DB_USER信息的数据库，一般为admin。 |
   | DB_USER       | 数据库用户。                    |
   | DB_NAME       | 需要迁移的数据库名称。               |
   | DB_COLLECTION | 需要迁移的数据库集合。               |
   | DB_PATH       | 存储数据JSON文件所在的路径。          |
      
   出现如下提示时，输入数据库管理员对应的密码：
   ```
   Enter password:
   ```
   示例如下，命令执行完会生成"exportfile.json"文件：
   **./mongoexport --host 192.168.1.21 --port 8635 --ssl --sslAllowInvalidCertificates --type json --authenticationDatabase admin -u rwuser --db test02 --collection Test --out /tmp/mongodb/export/exportfile.json**
   
   
3. 查看导出结果。 
   输出内容显示如下，说明迁移成功。其中，"x"表示转储数据的记录条数。
   ```
   exported x records
   ```
   
   
4. 压缩导出的JSON文件。 
   **gzip exportfile.json**
   压缩是为了方便网络传输，压缩后生成"exportfile.json.gz"文件。
   
   
 
#### 将数据导入至目标GeminiDB Mongo
1. 登录到已准备的弹性云服务器或可访问GeminiDB Mongo 数据库的设备。
2. 将要导入的数据上传到弹性云服务器或可访问GeminiDB Mongo 数据库的设备。 
   根据不同的平台选择相应的上传方法。
   - Linux下可参考命令： scp *\<* *IDENTITY_FILE\>* *\<REMOTE_USER\>* @*\<REMOTE_ADDRESS\>* :*\<REMOTE_DIR\>*
     - IDENTITY_FILE为存储"exportfile.json.gz"的文件目录，该文件目录权限为600。
     
     - REMOTE_USER为弹性云服务器的操作系统用户。
     
     - REMOTE_ADDRESS为弹性云服务器的主机地址。
     
     - REMOTE_DIR为将"exportfile.json.gz"上传到弹性云服务器的文件目录。
      
   
   - Windows平台下，请使用传输工具上传"exportfile.json.gz"至弹性云服务器。
   
   
   
   
3. 解压数据包。 
   **gzip** **-d** *exportfile.json.gz*
   
   
4. 将转储文件导入到GeminiDB Mongo 数据库。 
   此处以SSL连接方式为例进行说明，如果选择普通连接方式，去掉命令中对应的"--ssl --sslAllowInvalidCertificates"即可。
   ./**mongoimport --host** \<*DB_ADDRESS* \> **--port** \<*DB_PORT* \> **--ssl --sslAllowInvalidCertificates --type json --authenticationDatabase** \<*AUTH_DB* \> **-u** \<*DB_USER* \> **--db** \<*DB_NAME* \> **--collection** \<*DB_COLLECTION* \> **--file** \<*DB_PATH*\>
   表2参数说明 
   | 参数名称          | 说明                          |
   |:---|:---|
   | DB_ADDRESS    | GeminiDB Mongo数据库实例的IP地址。   |
   | DB_PORT       | GeminiDB Mongo数据库端口。        |
   | AUTH_DB       | DB_USER进行权限验证的数据库，一般为admin。 |
   | DB_USER       | 数据库管理员账号名。                  |
   | DB_NAME       | 需要导入的数据库。                   |
   | DB_COLLECTION | 需要导入的数据库中的集合。               |
   | DB_PATH       | 转储数据JSON文件所在的路径。            |
      
   出现如下提示时，输入数据库管理员对应的密码：
   ```
   Enter password:
   ```
   示例如下：
   **./mongoimport --host 192.168.1.21 --port 8635 --ssl --sslAllowInvalidCertificates --type json --authenticationDatabase admin -u rwuser --db test02 --collection Test --file /tmp/mongodb/export/exportfile.json**
   
   
5. 查看迁移结果。 
   输出内容显示如下，说明迁移成功。其中，"x"表示转储数据的记录条数。
   ```
   imported x records
   ```
   
   
 
