mongodump

在本页面

macOS Sierra and Go 1.6 Incompatibility

在 macOS Sierra 上运行的用户需要 3.2.10 或更高版本的 mongodump。

Synopsis

mongodump是用于创建数据库内容的二进制导出的 Util。 mongodump可以从mongodmongos实例中导出数据。

mongodump可以是backup strategymongorestore的一部分,用于基于查询进行部分备份,从生产环境同步到暂存或开发环境或更改独立存储引擎。但是,对于分片群集和副本集,使用mongodumpmongorestore作为备份策略可能会出现问题。

从系统命令行运行mongodump,而不是mongo shell。

有关备份和恢复策略的mongodump以及mongorestore部分的概述,请参见使用 MongoDB 工具备份和还原

Behavior

Data Exclusion

mongodump在其输出中排除local数据库的内容。

mongodump仅在其备份数据中捕获数据库中的文档,不包括索引数据。然后,mongorestoremongod必须在还原数据后重建索引。

在版本 3.4 中进行了更改:MongoDB 3.4 添加了对read-only views的支持。默认情况下,mongodump仅捕获视图的元数据:它不会创建视图中包含的文档的二进制导出。要在视图中捕获文档,请使用--viewsAsCollections

Read Preference

Replica Sets

在版本 3.2.0 中更改:连接到副本集时,为--host参数选择一个或多个目标会影响mongodump的读取首选项。

--host "replSet/rep1.example.net:27017,rep2.example.net:27017,rep3.example.net:27017"
--host "rep1.example.net:27017,rep2.example.net:27017,rep3.example.net:27017"

Sharded Clusters

在 3.0.5 版中进行了更改:对于分片为副本集的分片群集,在针对mongos实例运行时,mongodump不再喜欢从辅助成员读取数据。

对于分片群集,请为--host选项指定mongos的主机名。 mongodump从群集中每个分片副本集的primary副本集成员中读取。

分片群集中的未分片集合存储在primary shard上。 mongodump从主分片上的主副本集成员中读取所有未分片的集合。注意:每个数据库都有其自己的主分片。

Overwrite Files

mongodump覆盖输出文件(如果它们存在于备份数据文件夹中)。在多次运行mongodump命令之前,请确保不再需要输出文件夹中的文件(默认为dump/文件夹),或者重命名文件夹或文件。

数据压缩处理

当针对使用WiredTiger存储引擎的mongod实例运行时,mongodump输出未压缩的数据。

Working Set

mongodump会对mongod的性能产生不利影响。如果您的数据大于系统内存,则mongodump会将工作集推出内存。

Required Access

要针对已启用access control的 MongoDB 部署运行mongodump,您必须具有为每个要备份的数据库授予find操作的特权。内置的backup角色提供了执行所有数据库备份所需的特权。

在版本 3.2.1 中进行了更改:backup角色提供了额外的特权来备份使用database profiling运行时存在的system.profile集合。以前,用户需要对此集合具有额外的read访问权限。

Options

在 3.0.0 版中进行了更改:mongodump删除了--dbpath以及相关的--directoryperdb--journal选项。要使用mongodump,您必须根据需要对正在运行的mongodmongos实例运行mongodump

此选项禁止显示:

指定可解析的URI 连接字符串以连接到 MongoDB 部署。

--uri "mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]"

有关连接字符串的组成部分的更多信息,请参见连接字符串 URI 格式文档。

Important

以下命令行选项不能与--uri选项一起使用:

而是将这些选项指定为--uri连接字符串的一部分。

指定要连接的mongod的可解析主机名。默认情况下, mongodump 尝试连接到端口号27017上在 localhost 上运行的 MongoDB 实例。

要连接到副本集,请指定replSetName以及集合成员的种子列表,如下所示:

--host <replSetName>/<hostname1><:port>,<hostname2><:port>,<...>

指定副本集列表格式时, mongodump 始终连接到primary

您还可以通过指定仅该成员的主机和端口来连接到副本集的任何单个成员:

--host <hostname1><:port>

在 3.0.0 版中进行了更改:如果您使用 IPv6 并使用<address>:<port>格式,则必须将地址和端口组合的一部分括在方括号(例如[<address>])中。

Note

您不能同时指定--host--uri

指定 MongoDB 实例在其上侦听 Client 端连接的 TCP 端口。

Note

您不能同时指定--port--uri

启用 IPv6 支持,并允许 mongodump 使用 IPv6 网络连接到 MongoDB 实例。在 MongoDB 3.0 之前,您必须指定--ipv6才能使用 IPv6.在 MongoDB 3.0 和更高版本中,始终启用 IPv6.

启用与启用了 TLS/SSL 支持的mongodmongos的连接。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定包含来自证书颁发机构的根证书链的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

从 3.4 版开始,如果未指定--sslCAFilessl.CAFile并且未使用 x.509 身份验证,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

Warning

版本 3.2 及更早版本: 对于与mongodmongos的 TLS/SSL 连接(--ssl),如果 mongodump 在没有--sslCAFile的情况下运行,则 mongodump 不会尝试验证服务器证书。这会导致已过期的mongodmongos证书以及冒充有效mongodmongos实例的外部进程的漏洞。确保始终指定 CA 文件以在可能进行入侵的情况下验证服务器证书。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定同时包含 TLS/SSL 证书和密钥的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

使用--ssl选项连接到已启用CAFile且未启用allowConnectionsWithoutCertificatesmongodmongos时,此选项是必需的。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定用于解密证书密钥文件的密码(即--sslPEMKeyFile)。仅当证书密钥文件已加密时,才使用--sslPEMKeyPassword选项。在所有情况下, mongodump 都会从所有日志记录和报告输出中删除密码。

如果 PEM 文件中的私钥已加密,并且您未指定--sslPEMKeyPassword选项,则 mongodump 会提示您 Importing 密码。参见TLS/SSL 证书密码短语

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指定包含证书吊销列表的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

绕过服务器证书的验证检查,并允许使用无效的证书。使用allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。

从 MongoDB 3.6.6 开始,如果在使用 x.509 身份验证时指定--sslAllowInvalidCertificatesssl.allowInvalidCertificates: true,则无效的证书仅足以构建 TLS/SSL 连接,而对于身份验证则“不足”。

Warning

对于与mongodmongos的 TLS/SSL 连接,请尽可能避免使用--sslAllowInvalidCertificates,并且仅在不可能进行入侵的系统上使用--sslAllowInvalidCertificates

如果mongo shell(和其他MongoDB Tools)与--sslAllowInvalidCertificates选项一起运行,则mongo shell(和其他MongoDB Tools)将不会尝试验证服务器证书。这对过期的mongodmongos证书以及冒充有效的mongodmongos实例的外部进程造成了漏洞。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

禁用 TLS/SSL 证书中的主机名验证。允许 mongodump 连接到 MongoDB 实例,即使其证书中的主机名与指定的主机名不匹配也是如此。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指示 mongodump 使用已安装的 OpenSSL 库的 FIPS 模式。您的系统必须具有符合 FIPS 的 OpenSSL 库,才能使用--sslFIPSMode选项。

Note

兼容 FIPS 的 TLS/SSL 仅在MongoDB Enterprise中可用。有关更多信息,请参见为 FIPS 配置 MongoDB

Note

您不能同时指定--username--uri

在版本 3.0.2 中进行了更改:要提示用户 Importing 密码,请传递不带--password--username选项,或者像--password ""一样将空字符串指定为--password值。

Note

您不能同时指定--password--uri

Note

您不能同时指定--authenticationDatabase--uri

如果未指定身份验证数据库,则 mongodump 假定指定要导出的数据库包含用户的凭据。

如果您未指定身份验证数据库或要导出的数据库,则 mongodump 假定admin数据库拥有用户的凭据。

在 2.6 版中进行了更改:添加了对PLAINMONGODB-X509身份验证机制的支持。

在版本 3.0 中进行了更改:添加了对SCRAM-SHA-1身份验证机制的支持。将默认机制更改为SCRAM-SHA-1

指定 mongodump 实例用于对mongodmongos进行身份验证的身份验证机制。

Value Description
SCRAM-SHA-1 RFC 5802使用 SHA1 哈希函数的标准咸化挑战响应身份验证机制。
MONGODB-CR MongoDB 质询/响应身份验证。 (* MongoDB 3.6 中已弃用*)
MONGODB-X509 MongoDB TLS/SSL 证书认证。
GSSAPI (Kerberos) 使用 Kerberos 的外部身份验证。此机制仅在MongoDB Enterprise中可用。
PLAIN(LDAP SASL) 使用 LDAP 的外部身份验证。您也可以使用PLAIN对数据库中的用户进行身份验证。 PLAIN以纯文本形式传输密码。此机制仅在MongoDB Enterprise中可用。

Note

您不能同时指定--authenticationMechanism--uri

使用GSSAPI/Kerberos指定服务的名称。仅当服务未使用默认名称mongodb时才需要。

此选项仅在 MongoDB Enterprise 中可用。

使用GSSAPI/Kerberos指定服务的主机名。 如果计算机的主机名与 DNS 解析的主机名不匹配。

此选项仅在 MongoDB Enterprise 中可用。

Note

您不能同时指定--db--uri

您必须将查询文档括在单引号('{ ... }')中,以确保它不会与 Shell 环境交互。

将包含 JSON 文档的文件的路径指定为查询过滤器,以限制mongodump输出中包含的文档。 --queryFile使您可以创建太大而无法容纳终端缓冲区的查询过滤器。

See 读取首选项模式.

连接到mongosreplica set时, mongodump 默认为primary read preference

否则, mongodump 默认为nearest

Warning

primary以外的read preferencemongos连接使用时,可能会导致不一致,重复或丢失文档的情况。

See Read Preference.

--forceTableScan无法确保时间点快照。使用--oplog创建时间点快照。

您不能将--forceTableScan--query选项一起使用。

MMAPv1 Only

--forceTableScan上针对MMAPv1存储引擎运行 mongodump 可能会在输出中导致同一文档的多个版本。

压缩输出。如果mongodump输出到转储目录,则新功能将压缩单个文件。文件的后缀.gz

如果mongodump输出到存档文件或标准输出流,则新功能将压缩存档文件或输出到流的数据。

要将数据库转储发送到标准输出,请指定“ -”而不是路径。如果要在保存之前处理输出,请写入标准输出,例如使用gzip压缩转储。写入标准输出时,mongodump不会写入直接写入文件时写入<dbname>.metadata.json文件的元数据。

您不能将--archive选项与--out选项一起使用。

将输出写入单个存档文件或标准输出(stdout)。

要将转储输出到存档文件,请使用新的--archive选项和存档文件名运行mongodump

要将转储输出到标准输出流以便通过管道传输到另一个进程,请使用archive选项运行mongodump,但“忽略”文件名。

您不能将--archive选项与--out选项一起使用。

--repair ``

Note

修复数据库时,应使用mongod --repair而不是此选项。有关修复数据库的说明,请参阅意外关闭后恢复独立服务器

mongodump 的行为更改为仅写入有效数据,并排除由于不适当的关机或 mongod 崩溃而可能处于无效状态的数据。

--repairmongod --repair不同,并且可能会产生大量重复的文档。它仅可用于使用mmapv1存储引擎的mongod实例。您不能对mongos或对使用wiredTiger存储引擎的mongod实例运行--repair

有关修复数据库的说明,请参阅意外关闭后恢复独立服务器

如果没有--oplog,则在转储操作期间如果有写操作,则转储将不会反映单个时间。在更新过程中对数据库所做的更改可能会影响备份的输出。

当针对mongos实例运行mongodump以转储分片群集的全部内容时,--oplog无效。但是,您可以使用--oplog转储单个分片。

--oplog仅适用于维护oplog的节点。这包括副本集的所有成员,以及主/从复制部署中的master节点。

--oplog不转储 oplog 集合。

Note

要将mongodump--oplog结合使用,您必须创建replica set成员的完整转储。如果使用以下任何选项来限制要转储的数据,则mongodump--oplog会失败:

mongodump 输出中排除指定的集合。要排除多个集合,请多次指定--excludeCollection

mongodump 输出中排除所有具有指定前缀的集合。要指定多个前缀,请多次指定--excludeCollectionsWithPrefix

集合数量 mongodump 应该并行导出。

指定时, mongodumpread-only views导出为集合。对于每个视图, mongodump 将产生一个 BSON 文件,其中包含视图中的文档。如果您mongorestore生成的 BSON 文件,则视图将还原为collection

如果不包括--viewsAsCollections,则 mongodump 会捕获每个视图的元数据。如果您在mongorestore操作中包含视图的元数据文件,则会重新创建视图。

Examples

mongodump 收藏

以下操作将创建一个转储文件,该文件仅包含名为test的数据库中名为collection的集合。在这种情况下,数据库在端口27017的本地接口上运行:

mongodump  --db test --collection collection

mongodump 转储不包含指定集合的数据库

以下操作将转储test数据库中的所有集合,但userssalaries除外:

mongodump  --db test --excludeCollection=users --excludeCollection=salaries

具有访问控制的 mongodump

在下一个示例中,mongodump从主机mongodb1.example.net的端口37017上运行的数据库创建位于/opt/backup/mongodump-2011-10-24的数据库转储,并使用用户名user和密码pass进行身份验证,如下所示:

mongodump --host mongodb1.example.net --port 37017 --username user --password "pass" --out /opt/backup/mongodump-2011-10-24

输出到存档文件

3.2 版中的新功能。

要将转储输出到存档文件,请使用--archive选项和存档文件名运行mongodump。例如,以下操作创建一个文件test.20150715.archive,该文件包含test数据库的转储。

mongodump --archive=test.20150715.archive --db test

将存档输出到标准输出

3.2 版中的新功能。

要将 Files 输出到标准输出流以便通过管道传输到另一个进程,请使用archive选项运行mongodump,但是省略文件名:

mongodump --archive --db test --port 27017 | mongorestore --archive --port 27018

Note

您不能将--archive选项与--out选项一起使用。

压缩输出

要压缩输出转储目录中的文件,请使用新的--gzip选项运行mongodump。例如,以下操作将 zipfile 输出到默认的dump目录中。

mongodump --gzip --db test

要压缩mongodump压缩的归档文件输出,请结合使用--gzip选项和--archive选项,并指定 zipfile 的名称。

mongodump --archive=test.20150715.gz --gzip --db test
首页