mongodump
定义
mongodump
是一种用于创建数据库内容二进制导出文件的实用程序。mongodump
可以从以下位置导出数据:
独立运行部署
副本集
分片集群
您可以使用 Database Tools 从自托管部署迁移到 MongoDB Atlas。MongoDB Atlas 是用于云中 MongoDB 部署的完全托管服务。要了解详情,请参阅使用 mongorestore 播种。
要了解迁移到 MongoDB Atlas 的所有方法,请参阅迁移或导入数据。
mongodump
可以连接到 mongod
和 mongos
实例。
您可以将从 mongodump
生成的 BSON 文件恢复到与源部署运行相同主版本或特征兼容性版本的 MongoDB 部署中。
从系统命令行运行 mongodump
,而非 mongo
shell。
如果您要存档过时数据以节省存储成本,请考虑使用 MongoDB Atlas 中的 Online Archive。Online Archive 可自动将不常访问的数据存档到完全托管的 S3 存储桶,以实现经济高效的数据分层。
mongodump
转储:
收集文档、元数据和选项。
索引定义。
如果使用
mongodump
--oplog
选项运行,则在导出期间发生的写入。
mongodump
将数据转储到目录或二进制存档文件中。
将数据转储到目录
示例 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 中的新增内容。
指定包含以下
mongodump
选项的敏感值的 YAML 配置文件的完整路径:除通过密码提示来指定密码之外,这是为
mongodump
指定密码的另一推荐方法。配置文件采用以下形式:
password: <password> uri: mongodb://mongodb0.example.com:27017 sslPEMKeyPassword: <password> 向
password:
字段指定密码并在uri:
字段中提供包含冲突密码的连接字符串将导致错误。请务必使用相应的文件系统权限保护此文件。
注意
如果使用
--config
来指定配置文件,并使用--password
、--uri
或--sslPEMKeyPassword
选项来mongodump
,那么每个命令行选项均会覆盖其在配置文件中的相应选项。
--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-AWS
authentication 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-AWS
authentication mechanism
连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 秘密访问密钥:这个字段,
AWS_SECRET_ACCESS_KEY
环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
警告
在某些系统上,直接使用
--password
选项提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。请考虑:省略
--password
选项,从而接收交互式密码提示,或使用
--config
选项指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>
如果使用
MONGODB-AWS
authentication mechanism
连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:这个字段,
connection string
的AWS_SESSION_TOKEN
authMechanismProperties
参数,或AWS_SESSION_TOKEN
环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
仅在使用
MONGODB-AWS
authentication mechanism
时有效。
--authenticationDatabase=<dbname>
指定已创建指定
--username <mongodump --username>
的身份验证数据库。请参阅身份验证数据库。如果未指定身份验证数据库,
mongodump
将假定指定要导出的数据库保存用户凭证。如果未指定身份验证数据库或要导出的数据库,则
mongodump
将假定admin
数据库保存用户的凭证。如果使用的是 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或
MONGODB-AWS
authentication 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
身份验证机制的支持。值说明使用 SHA-1 哈希函数的 RFC 5802 标准 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)或者,也可以直接在
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
。要使用mongodump
备份分分片的集群,请参阅使用数据库转储备份自管理分片集群。重要
如果客户端在转储过程中发出所列的任何操作,则带
--oplog
的mongodump
运行会失败。--oplog
在mongos
实例上运行mongodump
以转储分片集群的全部内容时不起作用。--oplog
仅适用于维护 oplog 的节点。这包括副本集的所有成员。--oplog
不会转储 oplog 集合。注意
要将
mongodump
与--oplog
一起使用,必须创建副本集节点的完整转储。如果使用以下任一选项限制要转储的数据,则带--oplog
的mongodump
将失败:--db
--collection
--dumpDbUsersAndRoles
--query
--dumpDbUsersAndRoles
在特定数据库上执行
mongodump
时,应在数据库的转储目录中包含用户和角色定义。仅当在--db
选项中指定数据库时,此选项才会应用。将mongodump
应用于整个实例而非特定数据库时,MongoDB 始终包含用户与角色定义。
--excludeCollectionsWithPrefix=<string>
排除
mongodump
输出中所有带有指定前缀的集合。如需指定多个前缀,请多次指定--excludeCollectionsWithPrefix
。
--viewsAsCollections
指定后,
mongodump
会将视图导出为集合。注意
仅导出视图。默认情况下,
mongodump
仅导出视图的元数据。要导出视图中的文档,请使用--viewsAsCollections
选项。对于每个视图,
mongodump
都会创建一个 BSON 文件,其中包含该视图中的文档。如果您将mongorestore
与由mongodump
创建的 BSON 文件一起使用,则视图将恢复为集合。如果不包含
--viewsAsCollections
,mongodump
会捕捉每个视图的元数据。如果您在mongorestore
操作中包含视图的元数据文件,则该视图会重建。
了解详情
有关 mongodump
的更多信息,请参阅:
有关教程,请参阅使用数据库转储备份自管理分片集群。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos 和客户端的 TLS/SSL 配置。