mongodump
定义
mongodump
是一个工具,用于创建数据库内容的二进制导出。 mongodump
可以导出以下内容的数据:
独立部署
副本集
分片集群
您可以使用 MongoDB 数据库工具从自托管部署迁移到 MongoDB Atlas。 MongoDB Atlas 是云中 MongoDB 部署的全托管服务。欲了解更多信息,请参阅 使用 mongorestore 进行初始化。
要了解将数据迁移到 MongoDB Atlas 的所有方法,请参阅 迁移或导入数据。
mongodump
可以连接到 mongod
和 mongos
实例。
您可以将从 mongodump
生成的 BSON 文件恢复到与源部署相同主要版本或功能兼容版本运行的 MongoDB 部署中。
从系统命令行运行 mongodump
,而不是从 mongo
脚本。
如果您正在存档过时数据以节省存储成本,请考虑在 在线存档 中存档数据 MongoDB Atlas。在线存档会自动将不常访问的数据存档到完全管理的 S3 存储桶中,以实现成本效益的数据分层。
mongodump
导出
集合文档、元数据和选项。
索引定义。
在运行带有
mongodump
--oplog
选项时发生的写入。
mongodump
将数据导出到目录或二进制存档文件。
重要
您不能使用带有查询加密的集合使用 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
连接字符串选项中指定副本集名称和成员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
连接字符串选项中指定读取偏好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>}'
来指定模式,可选的 读取偏好标签集,以及可选的 最大不新鲜秒数: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
连接字符串选项中指定mongos
实例的主机名mongodump --uri="mongodb://mongos0.example.com:27017" [additional options] 在
--host
选项中指定mongos
实例的主机名和端口mongodump --host="mongos0.example.com:27017" [additional options]
默认情况下,mongodump
从分片副本集的主节点读取。要覆盖默认设置,您可以指定 读取偏好:
您可以在
--uri
连接字符串选项中指定读取偏好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
命令行选项来指定读取偏好。如果只指定读取偏好模式,则命令行选项接受一个字符串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:
,将会导致错误。请确保使用适当的文件系统权限来保护此文件。
注意
如果您指定了配置文件并使用
--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格式文档。
注意
连接字符串中的一些组件可以使用它们自己的明确命令行选项进行指定,例如
--username
和--password
。在提供连接字符串的同时使用明确选项并指定冲突信息将导致错误。注意
--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 连接字符串
中指定主机名。当同时提供连接字符串并使用--host
并指定冲突信息时,将会导致错误。
--port=<port>
默认值: 27017
指定 MongoDB 实例监听客户端连接的 TCP 端口。
或者,您也可以直接在
URI 连接字符串
中指定端口。当同时提供连接字符串并使用--port
并指定冲突信息时,将会导致错误。
--ssl
启用对已启用TLS/SSL支持的
mongod
或mongos
的连接。或者,您也可以直接在
URI连接字符串
中配置TLS/SSL支持。在同时使用--ssl
并指定冲突信息时提供连接字符串将导致错误。
--sslCAFile=<filename>
指定包含证书颁发机构根证书链的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。或者,您也可以直接在
URI连接字符串
中指定.pem
文件。在同时使用--sslCAFile
并指定冲突信息时提供连接字符串将导致错误。
--sslPEMKeyFile=<filename>
指定包含TLS/SSL证书和密钥的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。当使用
--ssl
选项连接到启用了CAFile
而没有allowConnectionsWithoutCertificates
的mongod
或mongos
时,此选项是必需的。或者,您还可以在
URI连接字符串
中直接指定.pem
文件。当同时使用--sslPEMKeyFile
和指定冲突信息时,将导致错误。
--sslPEMKeyPassword=<value>
指定用于解密证书密钥文件的密码(即
--sslPEMKeyFile
)。只有当证书密钥文件被加密时,才使用`--sslPEMKeyPassword`
选项。在所有情况下,mongodump
将从所有日志和报告输出中删除密码。如果PEM文件中的私钥被加密,并且您没有指定
--sslPEMKeyPassword
选项,mongodump
将提示输入口令。请参阅TLS/SSL证书口令。或者,您还可以在
URI连接字符串
中直接指定密码。当同时使用--sslPEMKeyPassword
并指定冲突信息时,将导致错误。警告
在某些系统上,使用
--sslPEMKeyPassword
选项直接提供的密码可能对系统状态程序(如ps
)可见,这些程序可能由其他用户调用。考虑使用--config
选项来指定包含密码的配置文件。
--sslAllowInvalidCertificates
绕过服务器证书的验证检查,允许使用无效证书。当使用
allowInvalidCertificates
设置时,MongoDB 记录无效证书的使用情况作为警告。警告
或者,您还可以在
URI 连接字符串
中直接禁用证书验证。在同时使用--sslAllowInvalidCertificates
并指定冲突信息时提供连接字符串会导致错误。
--sslAllowInvalidHostnames
禁用对 TLS/SSL 证书中主机名的验证。允许
mongodump
连接到 MongoDB 实例,即使它们证书中的主机名与指定的主机名不匹配。您也可以直接在
URI 连接字符串
中禁用主机名验证。当使用--sslAllowInvalidHostnames
并指定冲突信息时,将导致错误。
--username=<username>, -u=<username>
指定用于认证到使用认证的 MongoDB 数据库的用户名。与
--password <mongodump --password>
和--authenticationDatabase <mongodump --authenticationDatabase>
选项一起使用。您也可以直接在
URI 连接字符串
中指定用户名。当使用--username
并指定冲突信息时,将导致错误。如果您使用
MONGODB-AWS
认证机制
连接到 MongoDB Atlas 集群,您可以在以下字段中指定您的 AWS 访问密钥 ID:此字段,
连接字符串中,或
AWS_ACCESS_KEY_ID
环境变量。
--password=<密码>, -p=<密码>
指定用于认证到使用认证的MongoDB数据库的密码。与
--username <mongodump --username>
和--authenticationDatabase <mongodump --authenticationDatabase>
选项一起使用。要提示用户输入密码,请使用不带
--password <mongodump --password>
的--username <mongodump --username>
选项,或将--password <mongodump --password>
的值指定为空字符串,例如--password ""
。或者,您还可以在
URI连接字符串
中直接指定密码。在使用--password
和指定冲突信息的同时提供连接字符串将导致错误。如果使用
MONGODB-AWS
认证机制
连接到MongoDB Atlas集群,您可以在此字段,
连接字符串中,或
AWS_SECRET_ACCESS_KEY
环境变量中指定您的AWS密钥访问密钥。
请参阅使用AWS IAM凭据连接到MongoDB Atlas集群的示例。
警告
在某些系统上,直接使用
--password
选项提供的密码可能会被系统状态程序(如ps
)看到,这些程序可能由其他用户调用。请考虑省略
--password
选项以接收交互式密码提示,或者使用
--config
选项指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>
如果使用 MongoDB Atlas 集群并通过
MONGODB-AWS
认证机制
连接,并且除了 AWS 访问密钥 ID 和秘密访问密钥之外还使用会话令牌,您可以在请参阅使用AWS IAM凭据连接到MongoDB Atlas集群的示例。
仅在使用
MONGODB-AWS
认证机制
时有效。
--authenticationDatabase=<dbname>
指定已创建指定
--username <mongodump --username>
的认证数据库。见 认证数据库。如果您未指定认证数据库,
mongodump
假设要导出的数据库包含用户的凭据。如果您未指定认证数据库或导出数据库,
mongodump
假定admin
数据库包含用户的凭据。如果使用 GSSAPI(Kerberos)、PLAIN(LDAP SASL)或
MONGODB-AWS
认证机制
,您必须将--authenticationDatabase
设置为$external
。或者,您也可以在
URI 连接字符串
中直接指定认证数据库。同时提供连接字符串并使用--authenticationDatabase
并指定冲突信息将导致错误。
--authenticationMechanism=<name>
默认值: SCRAM-SHA-1
指定
mongodump
实例用于认证到mongod
或mongos
的认证机制。变更在版本100.1.0: 从版本
100.1.0
开始,mongodump
在连接到 MongoDB Atlas 集群时增加了对MONGODB-AWS
认证机制的支持。值描述RFC 5802 标准盐值挑战响应认证机制,使用SHA-1散列函数。RFC 7677 标准盐值挑战响应认证机制,使用SHA-256散列函数。
需要将featureCompatibilityVersion设置为
4.0
。MongoDB TLS/SSL证书认证。MONGODB-AWS
使用AWS IAM凭证进行外部认证,以连接到MongoDB Atlas集群。请参阅使用AWS IAM凭证连接到MongoDB Atlas集群。
新功能在版本100.1.0.
GSSAPI(Kerberos)使用Kerberos进行外部认证。此机制仅在MongoDB Enterprise。中可用。PLAIN(LDAP SASL)或者,您也可以直接在
URI连接字符串
中指定认证机制。在同时使用--authenticationMechanism
并指定冲突信息时,将导致错误。
--gssapiServiceName
使用 GSSAPI/Kerberos 指定服务名称。只有在服务不使用默认名称
mongodb
时才需要。此选项仅在 MongoDB 企业版中可用。
或者,您还可以直接在
URI 连接字符串
中指定服务名称。在提供连接字符串的同时使用--gssapiServiceName
并指定冲突信息将导致错误。
--gssapiHostName
使用
GSSAPI/Kerberos </core/kerberos>
指定服务的主机名。只有在机器的主机名与DNS解析的主机名不匹配时才需要。此选项仅在 MongoDB 企业版中可用。
--db=<database>, -d=<database>
指定要备份的数据库。如果不指定数据库,
mongodump
将将此实例中的所有数据库复制到备份文件中。或者,您也可以直接在
URI 连接字符串
中指定数据库。在提供连接字符串的同时使用--db
并指定冲突信息将导致错误。
--query=<json>, -q=<json>
提供一个 JSON 文档 作为查询,以可选地限制
mongodump
输出的文档。要使用--query
选项,您还必须指定--collection <mongodump --collection>
选项。必须将查询文档用单引号 (
'{ ... }'
) 括起来,以确保它不会与您的 shell 环境交互。查询必须 在 Extended 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=<路径>
指定包含JSON文档的查询过滤器的文件路径,该过滤器限制了
mongodump
输出的文档。使用--queryFile
可以创建无法适应终端缓冲区的大型查询过滤器。注意
在时间序列集合上使用
--queryFile
选项时,您只能查询指定的metaField
字段。
--readPreference=<字符串|文档>
默认值:
primary
指定
mongodump
的读取偏好。--readPreference
选项可以接受如果只指定读取偏好模式,则是一个字符串
--readPreference=secondary 一个引号括起来的文档,用于指定模式、可选的读取偏好标签集和可选的maxStalenessSeconds:
--readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ], maxStalenessSeconds: 120}' 如果指定了maxStalenessSeconds,则值必须大于或等于90。
mongodump
默认为primary
读取偏好。如果读取偏好也包含在
--uri
连接字符串中,则命令行--readPreference
将覆盖URI字符串中指定的读取偏好。
--gzip
压缩输出。如果
mongodump
输出到导出目录,新功能会压缩单个文件。文件后缀为.gz
。如果
mongodump
输出到归档文件或标准输出流,新功能会压缩归档文件或输出到流中的数据。
--out=<路径>, -o=<路径>
指定
mongodump
将导出的数据库的 BSON 文件写入的目录。默认情况下,mongodump
在当前工作目录下名为dump
的目录中保存输出文件。要将数据库导出发送到标准输出,请指定 "
-
" 而不是路径。如果要处理输出然后再保存,例如使用gzip
压缩导出,请写入标准输出。当写入标准输出时,mongodump
不会写入写入文件时在<dbname>.metadata.json
文件中写入的元数据。不能将
--archive
选项与--out
选项一起使用。
--archive=<文件>
将输出写入指定的归档文件,如果没有指定归档文件,则写入标准输出(
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 集合。注意
要使用带有
--oplog
的mongodump
,您必须创建一个复制集成员的完整备份。如果使用以下任何选项来限制要备份的数据,带有--oplog
的mongodump
将失败:--db
--collection
--dumpDbUsersAndRoles
--query
--dumpDbUsersAndRoles
在执行特定数据库的
mongodump
时,包含用户和角色定义在数据库的备份目录中。此选项仅在指定--db
选项时适用。当mongodump
应用于整个实例而不是特定数据库时,MongoDB 总是包含用户和角色定义。
--excludeCollectionsWithPrefix=<string>
从
mongodump
输出中排除所有指定前缀的集合。要指定多个前缀,请多次指定--excludeCollectionsWithPrefix
。
--viewsAsCollections
当指定时,
mongodump
将视图作为集合导出。注意
仅导出视图。默认情况下,
mongodump
只导出视图的元数据。要导出视图中的文档,请使用--viewsAsCollections
选项。对于每个视图,
mongodump
创建一个包含视图中文档的 BSON 文件。如果您使用由mongodump
创建的 BSON 文件与mongorestore
一起使用,视图将作为集合恢复。如果您不包括
--viewsAsCollections
,则mongodump
会捕获每个视图的元数据。如果您在mongorestore
操作中包含一个视图的元数据文件,则视图将被重新创建。
--compressors=<string>
指定 MongoDB 服务器与
mongodump
之间使用的压缩算法。您可以为--compressors
选项使用一个或多个这些值snappy
zlib
zstd
如果您指定了多个压缩算法,则
mongodump
使用您的 MongoDB 部署支持的列表中的第一个。有关压缩器的更多信息,请参阅 Go 驱动网络压缩文档。
了解更多
有关 mongodump
的更多信息,请参阅
有关教程,请参阅 使用数据库转储备份自托管分片集群。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 为 mongod 和 mongos 配置 TLS/SSL 和 客户端 TLS/SSL 配置。