

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 转储、还原、导入和导出数据
<a name="backup_restore-dump_restore_import_export_data"></a>

您可以使用 `mongodump`、`mongorestore`、`mongoexport` 和 `mongoimport` 实用工具将数据移入和移出 Amazon DocumentDB 集群。此部分讨论了所有这些工具和配置的用途，以帮助您实现更好的性能。

**Topics**
+ [`mongodump`](#backup_restore-dump_restore_import_export_data-mongodump)
+ [`mongorestore`](#backup_restore-dump_restore_import_export_data-mongorestore)
+ [`mongoexport`](#backup_restore-dump_restore_import_export_data-mongoexport)
+ [`mongoimport`](#backup_restore-dump_restore_import_export_data-mongoimport)
+ [教程](#backup_restore-dump_restore_import_export_data-tutorial)

## `mongodump`
<a name="backup_restore-dump_restore_import_export_data-mongodump"></a>

`mongodump` 实用工具创建 MongoDB 数据库的二进制 (BSON) 备份。由于以二进制格式存储数据可实现较高的大小效率，因此，在希望将数据还原到 Amazon DocumentDB 集群中时，`mongodump` 工具是转储源 MongoDB 部署中的数据的首选方法。

根据用于执行命令的实例或计算机上的可用资源，您可以使用 `--numParallelCollections` 选项增加从默认 1 转储的并行集合的数量，从而加快 `mongodump` 的速度。一个好的经验法则是，在 Amazon DocumentDB 集群的主实例上，为每个 vCPU 启动一个工作线程。

**注意**  
我们对 Amazon DocumentDB 推荐高达且包括版本 100.6.1 的 MongoDB 数据库工具。您可以在[此处](https://www.mongodb.com/download-center/database-tools/releases/archive)下载 MongoDB 数据库工具。

### 示例用法
<a name="backup_restore-dump_restore_import_export_data-mongodump-example"></a>

下面是 Amazon DocumentDB 集群 `sample-cluster` 中的 `mongodump` 实用工具的使用示例。

```
mongodump --ssl \
    --host="sample-cluster.node.us-east-1.docdb.amazonaws.com:27017" \
    --collection=sample-collection \
    --db=sample-database \
    --out=sample-output-file \
    --numParallelCollections 4  \
    --username=sample-user \
    --password=abc0123 \
    --sslCAFile rds-combined-ca-cn-bundle.pem
```

## `mongorestore`
<a name="backup_restore-dump_restore_import_export_data-mongorestore"></a>

利用 `mongorestore` 实用工具，您可以还原使用 `mongodump` 实用工具创建的数据库的二进制 (BSON) 备份。您可以通过使用 `--numInsertionWorkersPerCollection` 选项（默认值为 1）增加还原期间每个集合的工作线程数来提高还原性能。一个好的经验法则是，在 Amazon DocumentDB 集群的主实例上，为每个 vCPU 启动一个工作线程。

### 示例用法
<a name="backup_restore-dump_restore_import_export_data-mongorestore-example"></a>

下面是 Amazon DocumentDB 集群 `sample-cluster` 中的 `mongorestore` 实用工具的使用示例。

```
mongorestore --ssl \
    --host="sample-cluster.node.us-east-1.docdb.amazonaws.com:27017" \
    --username=sample-user \
    --password=abc0123 \
    --sslCAFile rds-combined-ca-cn-bundle.pem <fileToBeRestored>
```

## `mongoexport`
<a name="backup_restore-dump_restore_import_export_data-mongoexport"></a>

`mongoexport` 工具将 Amazon DocumentDB 中的数据导出为 JSON、CSV 或 TSV 文件格式。`mongoexport` 工具是导出要求可供人类或机器读取的数据的首选方法。

**注意**  
`mongoexport` 无法直接支持并行导出。但是，可以通过同时为不同的集合执行多个 `mongoexport` 作业来提高性能。

### 示例用法
<a name="backup_restore-dump_restore_import_export_data-mongoexport-example"></a>

下面是 Amazon DocumentDB 集群 `sample-cluster` 中的 `mongoexport` 工具的使用示例。

```
mongoexport --ssl \
    --host="sample-cluster.node.us-east-1.docdb.amazonaws.com:27017" \
    --collection=sample-collection \
    --db=sample-database \
    --out=sample-output-file \
    --username=sample-user \
    --password=abc0123 \
    --sslCAFile rds-combined-ca-cn-bundle.pem
```

## `mongoimport`
<a name="backup_restore-dump_restore_import_export_data-mongoimport"></a>

`mongoimport` 工具将 JSON、CSV 或 TSV 文件的内容导入 Amazon DocumentDB 集群中。可以使用 `-–numInsertionWorkers` 参数实现并行化和加快导入速度（默认值为 1）。

### 示例用法
<a name="backup_restore-dump_restore_import_export_data-mongoimport-example"></a>

下面是 Amazon DocumentDB 集群 `sample-cluster` 中的 `mongoimport` 工具的使用示例。

```
mongoimport --ssl \
    --host="sample-cluster.node.us-east-1.docdb.amazonaws.com:27017" \
    --collection=sample-collection \
    --db=sample-database \
    --file=<yourFile> \
    --numInsertionWorkers 4 \
    --username=sample-user \
    --password=abc0123 \
    --sslCAFile rds-combined-ca-cn-bundle.pem
```

## 教程
<a name="backup_restore-dump_restore_import_export_data-tutorial"></a>

以下教程介绍如何使用 `mongodump`、`mongorestore`、`mongoexport` 和 `mongoimport` 实用工具将数据移入和移出 Amazon DocumentDB 集群。

1. **先决条件**：在开始之前，请确保您的 Amazon DocumentDB 集群已配置，并且您有权访问位于您的集群所在的同一 VPC 中的 Amazon EC2 实例。有关更多信息，请参阅 [使用 Amazon EC2 进行连接](connect-ec2.md)。

   要使用 mongo 实用工具，您必须在 EC2 实例中安装 mongodb-org-tools软件包，如下所示。

   ```
   sudo yum install mongodb-org-tools-4.0.18
   ```

   由于 Amazon DocumentDB 默认使用传输层安全性协议（TLS）加密，因此您还必须下载 Amazon RDS 证书颁发机构 (CA) 文件以使用 mongo Shell 进行连接，如下所示。

   ```
   wget https://s3.cn-north-1.amazonaws.com.cn/rds-downloads/rds-combined-ca-cn-bundle.pem
   ```

1. **下载示例数据**：在本教程中，您将下载一些包含餐厅相关信息的示例数据。

   ```
   wget https://raw.githubusercontent.com/ozlerhakan/mongodb-json-files/master/datasets/restaurant.json
   ```

1. **将示例数据导入 Amazon DocumentDB 中**：由于数据采用的是逻辑 JSON 格式，因此，您将使用 `mongoimport` 实用工具将数据导入 Amazon DocumentDB 集群中。

   ```
   mongoimport --ssl \ 
       --host="tutorialCluster.amazonaws.com:27017" \ 
       --collection=restaurants \
       --db=business \ 
       --file=restaurant.json \
       --numInsertionWorkers 4 \
       --username=<yourUsername> \
       --password=<yourPassword> \
       --sslCAFile rds-combined-ca-cn-bundle.pem
   ```

1. **使用 `mongodump` 转储数据**：现在，Amazon DocumentDB 集群中已有数据，您可以使用 `mongodump` 实用工具对该数据进行二进制转储。

   ```
   mongodump --ssl \
       --host="tutorialCluster.us-east-1.docdb.amazonaws.com:27017"\
       --collection=restaurants \
       --db=business \
       --out=restaurantDump.bson \
       --numParallelCollections 4 \
       --username=<yourUsername> \
       --password=<yourPassword> \
       --sslCAFile rds-combined-ca-cn-bundle.pem
   ```

1. **删除 `restaurants` 集合**：在还原 `business` 数据库中的 `restaurants` 集合之前，必须先删除该数据库中已有的集合，如下所示。

   ```
   use business
   ```

   ```
   db.restaurants.drop()
   ```

1. **使用 `mongorestore` 还原数据**：在步骤 3 中对数据进行二进制转储后，您现在可以使用 `mongorestore` 实用工具将数据还原到 Amazon DocumentDB 集群。

   ```
   mongorestore --ssl \
       --host="tutorialCluster.us-east-1.docdb.amazonaws.com:27017" \
       --numParallelCollections 4 \
       --username=<yourUsername> \
       --password=<yourPassword> \
       --sslCAFile rds-combined-ca-cn-bundle.pem restaurantDump.bson
   ```

1. **使用 `mongoexport` 导出数据**：要完成本教程，请以 JSON 文件的格式从集群中导出数据，与您在步骤 1 中导入的文件没有什么不同。

   ```
   mongoexport --ssl \
       --host="tutorialCluster.node.us-east-1.docdb.amazonaws.com:27017" \
       --collection=restaurants \
       --db=business \
       --out=restaurant2.json \
       --username=<yourUsername> \
       --password=<yourPassword> \
       --sslCAFile rds-combined-ca-cn-bundle.pem
   ```

1. **验证**：您可以使用以下命令验证步骤 5 的输出是否会产生与步骤 1 相同的结果。

   ```
   wc -l restaurant.json
   ```

   此命令的输出：

   ```
   2548 restaurant.json
   ```

   ```
   wc -l restaurant2.json
   ```

   此命令的输出：

   ```
   2548 restaurant2.json
   ```