定义
mongodump 是一种用于创建数据库内容二进制导出文件的实用程序。mongodump 可以从以下位置导出数据:
独立运行部署
副本集
分片集群
Flex 集群
您可以使用 MongoDB Database Tools 从自托管部署迁移到 MongoDB Atlas。MongoDB Atlas 是用于云中 MongoDB 部署的完全托管服务。如要了解详情,请参阅 Seed with mongorestore。
要了解迁移到 MongoDB Atlas 的所有方法,请参阅迁移或导入数据。
mongodump 可以连接到 mongod 和 mongos 实例。
您可以将从 mongodump 生成的 BSON 文件恢复到与源部署运行相同主版本或特征兼容性版本的 MongoDB 部署中。
从系统命令行运行 mongodump,而非 mongo shell。
提示
mongorestore,允许导入从 mongodump 导出的数据。
如果您要存档过时数据以节省存储成本,请考虑使用 MongoDB Atlas 中的 Online Archive。Online Archive 可自动将不常访问的数据存档到完全托管的 S3 存储桶,以实现经济高效的数据分层。
mongodump 转储:
收集文档、元数据和选项。
索引定义。
如果使用
mongodump--oplog选项运行,则在导出期间发生的写入。
mongodump 将数据转储到目录或二进制存档文件中。
重要
您不能将 mongodump 与使用Queryable Encryption的集合一起使用。
将数据转储到目录
示例 mongodump 目录转储结构和文件:
dump ├── easternSalesDatabase │ ├── sales.bson │ ├── sales.metadata.json │ └── salesByMonthView.metadata.json ├── westernSalesDatabase │ ├── sales.bson │ ├── sales.metadata.json │ └── salesByMonthView.metadata.json └── oplog.bson
对于目录转储,mongodump 创建:
一个默认名称为
dump的根目录。您可以使用mongodump--out选项设置名称。每个数据库的根目录中的子目录。例如,如果数据库名称是
easternSalesDatabase,则子目录名称也是easternSalesDatabase。一个 BSON 文件,其中包含每个集合的文档。例如,如果集合名称为
sales,则 BSON 文件为sales.bson。每个数据库目录中每个集合的元数据 JSON 文件。例如,元数据
sales.metadata.json文件。该文件包含一个文档,其中包含导出的集合元数据、选项和索引。每个视图的元数据 JSON 文件。例如,元数据
salesByMonthView.metadata.json文件。视图没有 BSON 文件。位于根目录下的可选 oplog
oplog.bson文件,其中包含mongodump运行期间发生的写操作。要输出oplog.bson文件,请使用mongodump--oplog选项。
如果您使用 mongodump --gzip 选项,则会压缩 BSON 文件和 JSON 元数据文件。压缩后的导出文件的名称末尾有 bson.gz 和 metadata.json.gz。
将数据转储到二进制存档文件
若要将数据转储到二进制存档文件,请使用 mongodump --archive 选项。mongodump 创建包含归档数据的二进制文件。
语法
mongodump 事务语法:
mongodump <options> <connection-string>
如需连接到运行在 27017 端口的本地 MongoDB 实例并使用默认设置导出内容,请运行不带任何命令行选项的 mongodump:
mongodump
要指定 MongoDB 实例的主机和/或端口,可以执行以下任一操作:
在
--uri connection string选项中指定主机名和端口:mongodump --uri="mongodb://mongodb0.example.com:27017" [additional options] 在
--host选项中指定主机名和端口:mongodump --host="mongodb0.example.com:27017" [additional options] 在
--host和--port选项中指定主机名和端口:mongodump --host="mongodb0.example.com" --port=27017 [additional options]
要连接到副本集以导出其数据,可以执行以下操作:
在
--uri connection string选项中指定副本集的名称和成员:mongodump --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myReplicaSetName" [additional options] 在
--host选项中指定副本集的名称和成员:mongodump --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com" [additional options]
默认情况下, mongodump从副本集的主节点读取。 要覆盖默认值,可以指定读取偏好:
您可以通过
--uri connection string选项指定读取偏好:mongodump --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myReplicaSetName&readPreference=secondary" [additional options] 如果指定读取偏好标记,请包含
readPreferenceTags选项:mongodump --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myReplicaSetName&readPreference=secondary&readPreferenceTags=region:east" [additional options] 您可以使用
--readPreference命令行选项来指定读取偏好。如果仅指定读取偏好模式,则该命令行选项会使用一个字符串:mongodump --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017" --readPreference=secondary [additional options] 或者,该命令行选项可使用用引号括起的文档
'{ mode: <mode>, tagSets: [ <tag1>, ... ], maxStalenessSeconds:<num>}'来指定模式、可选读取偏好标签集以及可选 maxStalenessSeconds:mongodump --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017" --readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ]}' [additional options]
注意
为避免数据不一致,请在运行 mongodump 时暂停对分片集群执行以下操作:
跨分片事务
数据定义语言操作(创建和修改集合的操作)
数据块均衡
要停止负载均衡器,请使用 sh.stopBalancer() 方法。
要连接到分片集群以导出其数据,可以执行以下操作:
在
--uri connection string选项中指定mongos实例的主机名:mongodump --uri="mongodb://mongos0.example.com:27017" [additional options] 在
--host选项中指定mongos实例的主机名和端口:mongodump --host="mongos0.example.com:27017" [additional options]
默认情况下, mongodump从分片副本集的主节点读取。 要覆盖默认值,可以指定读取偏好:
您可以通过
--uri connection string选项指定读取偏好:mongodump --uri="mongodb://mongos0.example.com:27017/?readPreference=secondary" [additional options] 如果指定读取偏好标记,请包含
readPreferenceTags选项:mongodump --uri="mongodb://mongos0.example.com:27017/?readPreference=secondary&readPreferenceTags=region:east" [additional options] 您可以使用
--readPreference命令行选项指定读取偏好。 如果仅指定读取偏好模式,则该命令行选项会使用一个string :mongodump --host="mongos0.example.com:27017" --readPreference=secondary [additional options] 或者,该命令行选项可使用用引号括起的文档
'{ mode: <mode>, tagSets: [ <tag1>, ... ], maxStalenessSeconds: <num>}'来指定模式、可选读取偏好标签集以及可选 maxStalenessSeconds:mongodump --host="mongos0.example.com:27017" --readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ]}' [additional options]
选项
--quiet在尝试限制输出量的安静模式下运行
mongodump。该选项会抑制:
数据库命令输出
复制活动
已接受和已关闭的事件连接
所有日志,包括错误信息,解析选项时出现的错误信息除外
--config=<filename>版本 100.3.0 中的新增内容。
指定 YAML 配置文件的完整路径,该文件包含以下
mongodump选项的敏感值:除通过密码提示来指定密码之外,这是为
mongodump指定密码的另一推荐方法。您可以在文件中使用任何参数的组合。配置文件采用以下形式:
password: <password> uri: mongodb://mongodb0.example.com:27017 sslPEMKeyPassword: <password> 如果您指定了
password选项但未指定uri,则可以使用mongodump命令行选项指定连接字符串的其他组件,例如--username和--host。请务必使用相应的文件系统权限保护此文件。
重要
使用
--config选项时,请注意以下限制和行为:如果您提供
password字段,并在uri字段中提供一个与密码冲突的连接字符串,则mongorestore会抛出错误。如果您使用
--config指定配置文件,并且使用--password、--uri或--sslPEMKeyPasswordmongodump命令行选项,则命令行选项将覆盖相应的配置文件选项。
--uri=<connectionString>指定 MongoDB 部署的可解析 URI 连接字符串(用引号括起):
--uri="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" 从
mongodump的100.0版本开始,也可以将连接字符串作为位置参数提供,而无需使用--uri选项:mongodump mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 作为位置参数,可以在命令行上的任何位置指定连接字符串,前提是它以
mongodb://或mongodb+srv://开头。例如:mongodump --username joe --password secret1 mongodb://mongodb0.example.com:27017 --ssl 只能提供一个连接字符串。无论是使用
--uri选项还是作为位置参数,尝试纳入多个连接字符串都会导致错误。有关连接字符串的组件信息,请参阅连接字符串 URI 格式文档。
注意
connection string中的某些组件也可以使用各自的显式命令行选项来指定,例如--username和--password。在提供连接字符串的同时,使用显式选项并指定冲突信息会导致错误。注意
如果是在 Ubuntu 18.04 上使用
mongodump,则在使用带--uri选项的 SRV 连接字符串(采用mongodb+srv://格式)时,可能会出现“cannot unmarshal DNS”错误消息。如果是这样,请改用以下选项之一:带有 非 SRV 连接字符串(格式为
mongodb://)的--uri选项--host选项指定直接连接的主机
--host=<hostname><:port>, -h=<hostname><:port>默认:localhost:27017
指定 MongoDB 部署的可解析主机名。默认情况下,
mongodump尝试连接到在本地主机端口号27017上运行的 MongoDB 实例。要连接到副本集,请指定
replSetName和副本集成员的种子列表,如下所示:--host=<replSetName>/<hostname1><:port>,<hostname2><:port>,<...> 指定副本集列表格式时,
mongodump始终连接到主节点。还可以通过仅指定该成员的主机和端口来连接至副本集的任何单个成员:
--host=<hostname1><:port> 如果您使用 IPv6 并采用
<address>:<port>格式,那么您必须将地址与端口的组合部分用方括号括起。例如:[<address>]。或者,您也可直接在
URI connection string中指定主机名。在提供连接字符串的同时使用--host并指定冲突信息将导致错误。
--port=<port>默认值:27017
指定 MongoDB 实例侦听客户端连接的 TCP 端口。
或者,也可以直接在
URI connection string中指定端口。在提供连接字符串的同时使用--port并指定冲突信息将导致错误。
--ssl启用与已启用 TLS/SSL 支持的
mongod或mongos的连接。或者,也可以直接在
URI connection string中配置 TLS/SSL 支持。在提供连接字符串的同时使用--ssl并指定冲突信息将导致错误。
--sslCAFile=<filename>指定包含来自证书颁发机构的根证书链的
.pem文件。使用相对或绝对路径指定.pem文件的文件名。或者,也可以直接在
URI connection string中指定.pem文件。在提供连接字符串的同时使用--sslCAFile并指定冲突信息将导致错误。
--sslPEMKeyFile=<filename>指定同时包含 TLS/SSL 证书和密钥的
.pem文件。使用相对或绝对路径指定.pem文件的文件名。使用
--ssl选项连接到启用了CAFile且没有allowConnectionsWithoutCertificates的mongod或mongos时,需要使用此选项。或者,也可以直接在
URI connection string中指定.pem文件。在提供连接字符串的同时使用--sslPEMKeyFile并指定冲突信息将导致错误。
--sslPEMKeyPassword=<value>指定解密证书密钥文件的密码(即
--sslPEMKeyFile)。仅当证书密钥文件已加密时才使用`--sslPEMKeyPassword选项。在所有情况下,mongodump都会对所有日志记录和报告输出中的密码进行脱敏。如果 PEM 文件中的私钥已加密,并且您未指定
--sslPEMKeyPassword选项,mongodump将提示输入密码。请参阅 TLS/SSL 证书密码。或者,您也可以直接在
URI connection string中指定密码。在提供连接字符串的同时使用--sslPEMKeyPassword并指定冲突信息将导致错误。警告
在某些系统上,直接使用
--sslPEMKeyPassword选项提供的密码,可能会被其他用户调用的系统状态程序(如ps)探测到。可以考虑使用--config选项,指定一个包含密码的配置文件。
--sslAllowInvalidCertificates绕过对服务器证书的验证检查并允许使用无效证书。 使用
allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。警告
或者,也可以直接在
URI connection string中禁用证书验证。在提供连接字符串的同时使用--sslAllowInvalidCertificates并指定冲突信息将导致错误。
--sslAllowInvalidHostnames禁用 TLS/SSL 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持
mongodump连接到 MongoDB 实例。或者,您也可以直接在
URI connection string中禁用主机名验证。在提供连接字符串的同时使用--sslAllowInvalidHostnames并指定冲突信息将导致错误。
--username=<username>, -u=<username>指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与
--password <mongodump --password>和--authenticationDatabase <mongodump --authenticationDatabase>选项结合使用。或者,也可直接在
URI connection string中指定用户名。在提供连接字符串的同时使用--username并指定冲突信息将导致错误。如果使用
MONGODB-AWSauthentication mechanism连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 访问密钥 ID:这个字段,
AWS_ACCESS_KEY_ID环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
--password=<password>, -p=<password>指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与
--username <mongodump --username>和--authenticationDatabase <mongodump --authenticationDatabase>选项结合使用。要提示用户输入密码,可使用不带
--password <mongodump --password>的--username <mongodump --username>选项,或指定空字符串作为--password <mongodump --password>值,如--password ""。或者,您也可以直接在
URI connection string中指定密码。在提供连接字符串的同时使用--password并指定冲突信息将导致错误。如果使用
MONGODB-AWSauthentication mechanism连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 秘密访问密钥:这个字段,
AWS_SECRET_ACCESS_KEY环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
警告
在某些系统上,直接使用
--password选项提供的密码,可能会被其他用户调用的系统状态程序(如ps)探测到。请考虑:省略
--password选项,从而接收交互式密码提示,或使用
--config选项指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>如果使用
MONGODB-AWSauthentication mechanism连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:这个字段,
connection string的AWS_SESSION_TOKENauthMechanismProperties参数,或AWS_SESSION_TOKEN环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
仅在使用
MONGODB-AWSauthentication mechanism时有效。
--authenticationDatabase=<dbname>指定已创建指定
--username <mongodump --username>的身份验证数据库。请参阅身份验证数据库。如果未指定身份验证数据库,
mongodump将假定指定要导出的数据库保存用户凭证。如果未指定身份验证数据库或要导出的数据库,则
mongodump将假定admin数据库保存用户的凭证。如果使用的是 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或
MONGODB-AWSauthentication mechanisms,则须将--authenticationDatabase设为$external。或者,也可以直接在
URI connection string中指定身份验证数据库。在提供连接字符串的同时使用--authenticationDatabase并指定冲突信息将导致错误。
--authenticationMechanism=<name>默认值:SCRAM-SHA-1
指定
mongodump实例用来向mongod或mongos进行身份验证的身份验证机制。在版本 100.1.0 中进行了更改:从版本
100.1.0开始,mongodump在连接到 MongoDB Atlas 集群时增加了对MONGODB-AWS身份验证机制的支持。值说明5802使用 SHA-1 哈希函数的 RFC 标准 Salted 挑战响应身份验证机制。
RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism
需将 featureCompatibilityVersion 设为
4.0。MongoDB TLS/SSL 证书身份验证。
MONGODB-AWS使用 AWS IAM 凭据进行外部身份验证,用于连接到 MongoDB Atlas 集群。请参阅使用 AWS IAM 凭证连接到 MongoDB Atlas 集群。
100.1.0 版本新增。
GSSAPI (Kerberos)
使用 Kerberos 的外部身份验证。此机制仅在 MongoDB Enterprise 中可用。
普通版 (LDAP SASL)
使用 LDAP 进行外部身份验证。也可使用
PLAIN对数据库内用户进行身份验证。PLAIN以纯文本形式传输密码。此机制仅在 MongoDB Enterprise 中可用。或者,也可以直接在
URI connection string中指定身份验证机制。在提供连接字符串的同时使用--authenticationMechanism并指定冲突信息将导致错误。
--gssapiServiceName使用 GSSAPI/Kerberos 指定服务名称。仅当服务未使用默认名称
mongodb时才需要。此选项仅在 MongoDB Enterprise 中可用。
您也可以直接在
URI connection string中指定服务名称。在提供连接字符串的同时使用--gssapiServiceName并指定冲突信息将导致错误。
--gssapiHostName使用
GSSAPI/Kerberos </core/kerberos>指定服务的主机名。仅当机器的主机名与 DNS 解析的主机名不匹配时才需要。此选项仅在 MongoDB Enterprise 中可用。
--db=<database>, -d=<database>指定要备份的数据库。如果不指定数据库,
mongodump会将此实例中的所有数据库复制到转储文件。或者也可以直接在
URI connection string中指定数据库。在提供连接字符串的同时使用--db并指定冲突信息将导致错误。
--query=<json>, -q=<json>提供 JSON 文档作为查询,该查询可选择性地限制
mongodump输出中包含的文档。要使用--query选项,还必须指定--collection <mongodump --collection>选项。必须用单引号 (
'{ ... }') 括起查询文档,确保它不会与 shell 环境交互。查询 必须采用扩展 JSON v2 格式(宽松模式或规范/严格模式),其中包括用引号将字段名称和操作符括起来。例如:
mongodump -d=test -c=records -q='{ "a": { "$gte": 3 }, "date": { "$lt": { "$date": "2016-01-01T00:00:00.000Z" } } }' 如要使用
$regex和mongodump,请使用以下语法:mongodump -d=sample_mflix -c=movies -q='{ "year": { "$regex": "20" } }' 注意
在时间序列集合上使用
--query选项时,只能查询指定为metaField的字段。
--queryFile=<path>将包含 JSON 文档的文件的路径指定为查询过滤器,以限制在
mongodump输出中包含的文档。--queryFile使您能够创建过大而无法放入终端缓冲区的查询过滤器。注意
在时间序列集合上使用
--queryFile选项时,只能查询指定为metaField的字段。
--readPreference=<string|document>默认值:
primary指定
mongodump的读取偏好。--readPreference选项可以使用:如果仅指定读取偏好模式,则为一个字符串:
--readPreference=secondary 用引号括起的文档,用于指定模式、可选的读取偏好标签集以及可选的 maxStalenessSeconds:
--readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ], maxStalenessSeconds: 120}' 如果指定 maxStalenessSeconds,该值则须大于或等于 90。
mongodump默认为primary读取偏好。如果此读取偏好也包含在
--uri connection string <--uri>中,则命令行--readPreference会覆盖 URI 字符串中指定的读取偏好。
--gzip压缩输出。如果
mongodump输出到转储目录,则新功能将压缩单个文件。文件后缀为.gz。如果
mongodump输出到存档文件或标准输出数据流,则新功能会压缩存档文件或输出到数据流的数据。
--out=<path>, -o=<path>指定
mongodump将在其中为转储数据库写入 BSON 文件的目录。默认情况下,mongodump会将输出文件保存在当前工作目录中名为dump的目录中。要将数据库转储发送到标准输出,请指定 "
-" 而不是路径。如果想在保存之前处理输出,请写入到标准输出,例如使用gzip来压缩转储.写入标准输出时,mongodump不会写入当直接写入到文件时在<dbname>.metadata.json文件中写入的元数据。不能将
--archive选项与--out选项一起使用。
--archive=<file>将输出写入到指定的存档文件中;如果未指定存档文件,则写入到标准输出 (
stdout)。存档文件是多个 BSON 文件的单一文件替代方案。要将转储输出到存档文件,请运行带有
--archive <mongodump --archive>选项和存档文件名的mongodump。mongodump --archive=<file> 要将转储输出到标准输出流,以便通过管道传输到其他进程,请使用
--archive <mongodump --archive>选项运行mongodump,但省略文件名。mongodump --archive
不能将
--archive <mongodump --archive>选项与--out <mongodump --out>选项一起使用。
--oplog创建名为
oplog.bson的文件,作为mongodump输出的一部分。位于输出目录顶层的oplog.bson文件包含mongodump操作期间出现的 oplog 条目。要在恢复操作中应用
oplog.bson文件中的 oplog,请使用mongorestore --oplogReplay。您可以将mongodump --oplog与mongorestore --oplogReplay一起使用,以确保数据是最新的,并且包含转储期间发生的所有写入。如果没有
--oplog,则当转储操作期间有写入操作时,转储将不会反映任何单一时间点。在更新过程中对数据库所做的更改可能会影响备份的输出。要在接受写入的同时备份各个副本集,请使用
--oplog。重要
如果客户端在转储过程中发出所列的任何操作,则带
--oplog的mongodump运行会失败。--oplog在mongos实例上运行mongodump以转储分片集群的全部内容时不起作用。--oplog仅适用于维护 oplog 的节点。这包括副本集的所有成员。--oplog不会转储 oplog 集合。您无法在分片集群上运行
mongodump和--oplog。要使用mongodump备份分片的集群,请参阅使用数据库转储备份自管理分片集群。注意
要将
mongodump与--oplog一起使用,必须创建副本集节点的完整转储。如果使用以下任一选项限制要转储的数据,则带--oplog的mongodump将失败:--db--collection--dumpDbUsersAndRoles--query
--dumpDbUsersAndRoles在特定数据库上执行
mongodump时,应在数据库的转储目录中包含用户和角色定义。仅当在--db选项中指定数据库时,此选项才会应用。将mongodump应用于整个实例而非特定数据库时,MongoDB 始终包含用户与角色定义。
--excludeCollection=<string>排除
mongodump输出中指定的集合。如需排除多个集合,请多次指定--excludeCollection。如要使用
--excludeCollection选项,您必须指定一个数据库。您可以使用--db选项或在--uri连接字符串中指定数据库。
--excludeCollectionsWithPrefix=<string>排除
mongodump输出中所有带有指定前缀的集合。如需指定多个前缀,请多次指定--excludeCollectionsWithPrefix。如要使用
--excludeCollectionsWithPrefix选项,您必须指定一个数据库。您可以使用--db选项或在--uri连接字符串中指定数据库。
--viewsAsCollections指定后,
mongodump会将视图导出为集合。注意
仅导出视图。默认情况下,
mongodump仅导出视图的元数据。要导出视图中的文档,请使用--viewsAsCollections选项。对于每个视图,
mongodump都会创建一个 BSON 文件,其中包含该视图中的文档。如果您将mongorestore与由mongodump创建的 BSON 文件一起使用,则视图将恢复为集合。如果不包含
--viewsAsCollections,mongodump会捕捉每个视图的元数据。如果您在mongorestore操作中包含视图的元数据文件,则该视图会重建。
了解详情
有关 mongodump 的更多信息,请参阅:
有关教程,请参阅使用数据库转储备份自管理分片集群。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos 和客户端的 TLS/SSL 配置。