在Mongodb中我们使用mongodump命令来备份MongoDB数据。本文记录相关内容。
数据备份
在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump命令可以通过参数指定导出的数据量级转存的服务器。
mongodump
是一种用于创建数据库内容二进制导出文件的实用程序。mongodump
可以从以下位置导出数据:
- 独立运行部署
- 副本集
- 分片集群
- 无服务器实例
mongodump 可以连接到 mongod 和 mongos 实例。
注意:需要从系统命令行运行 mongodump
,而非 mongo shell
。
语法
mongodump
语法:
1 | mongodump <options> <connection-string> |
---|
要指定 MongoDB 实例的主机和/或端口,可以执行以下任一操作:
在 --uri connection string
选项中指定主机名和端口:
1 | mongodump --uri="mongodb://mongodb0.example.com:27017" [additional options] |
---|
在 --host
选项中指定主机名和端口:
1 | mongodump --host="mongodb0.example.com:27017" [additional options] |
---|
在 --host
和 --port
选项中指定主机名和端口:
1 | mongodump --host="mongodb0.example.com" --port=27017 [additional options] |
---|
常用选项
选项 | 含义 | 备注 |
---|---|---|
--help | 返回有关 mongodump 的选项和使用的信息。 | |
--out=<path>, -o=<path> | 指定 mongodump 将在其中为转储数据库写入 BSON 文件的目录。默认情况下,mongodump 会将输出文件保存在当前工作目录中名为 dump 的目录中。 | 一般会将输出文件存放在名为 dump 的文件夹中。 |
--db=<database>, -d=<database> | 指定要备份的数据库。如果不指定数据库,mongodump 会将此实例中的所有数据库复制到转储文件。 | |
--password=<password>, -p=<password> | 指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。 | |
--username=<username>, -u=<username> | 指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。 | |
--port=<port> | 指定 MongoDB 实例侦听客户端连接的 TCP 端口。 | 默认: 27017 |
--host=<hostname><:port>, -h=<hostname><:port> | 指定 MongoDB 部署的可解析主机名。默认情况下,mongodump 尝试连接到在本地主机端口号 27017 上运行的 MongoDB 实例。 | 默认:localhost:27017 |
--version | 返回 mongodump 版本号。 |
当数据库指定了需要鉴权访问,则必须输入正确的用户名和密码才可以执行 mongodump
,否则不予执行备份命令。
详细选项
-
--help
返回有关mongodump
的选项和使用的信息。 -
--verbose, -v
增加标准输出或日志文件中返回的内部报告数量。通过多次包含该选项,可以使用-v
形式增加详细程度。例如:-vvvvv
。 -
--quiet
在尝试限制输出量的安静模式下运行mongodump
。该选项会抑制:数据库命令复制活动已接受和已关闭的事件连接所有日志,包括错误信息,解析选项时出现的错误信息除外 -
--version
返回mongodump
版本号。 -
--config=<filename>
版本 100.3.0 中的新增内容。指定包含以下mongodump
选项的敏感值的 YAML 配置文件的完整路径:--password
--uri
--sslPEMKeyPassword
除通过密码提示来指定密码之外,这是为mongodump
指定密码的另一推荐方法。配置文件采用以下形式:password: <password>uri: mongodb://mongodb0.example.com:27017sslPEMKeyPassword: <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
,则在使用带mongodb srv://
选项的 (采用cannot unmarshal DNS
格式)时,可能会出现“](https://www.mongodb.com/zh-cn/docs/database-tools/mongodump/#std-option-mongodump.--uri)”错误消息。如果是这样,请改用以下选项之一:带有[
(格式为 )的mongodb://
选项--host
选项指定直接连接的主机警告在某些系统上,使用--uri
选项在连接字符串中提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。请考虑:在连接字符串中省略密码,接收交互式密码提示,或者使用--config
选项指定包含密码的配置文件。 -
--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
文件的文件名。或者,也可以直接在.pem
中指定URI connection string
文件。在提供连接字符串的同时使用--sslCAFile
并指定冲突信息将导致错误。 -
--sslPEMKeyFile=<filename>
指定同时包含 TLS/SSL 证书和密钥的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。使用--ssl
选项连接到启用了mongod
且mongos
的CAFile
或没有时,需要使用此选项。allowConnectionsWithoutCertificates
或者,也可以直接在.pem
中指定URI connection string
文件。在提供连接字符串的同时使用--sslPEMKeyFile
并指定冲突信息将导致错误。 -
--sslPEMKeyPassword=<value>
指定解密证书密钥文件的密码(即--sslPEMKeyFile
)。仅当证书密钥文件已加密时才使用 ``–sslPEMKeyPassword选项。在所有情况下,
mongodump都会对所有日志记录和报告输出中的密码进行脱敏。如果 PEM 文件中的私钥已加密,并且您未指定
–sslPEMKeyPassword选项,
mongodump将提示输入密码。请参阅[ TLS/SSL 证书密码。](https://www.mongodb.com/zh-cn/docs/manual/tutorial/configure-ssl/#std-label-ssl-certificate-password)或者,您也可以直接在 [
URI connection string](https://www.mongodb.com/zh-cn/docs/database-tools/mongodump/#std-option-mongodump.--uri) 中指定密码。在提供连接字符串的同时使用 [
–sslPEMKeyPassword](https://www.mongodb.com/zh-cn/docs/database-tools/mongodump/#std-option-mongodump.--sslPEMKeyPassword) 并指定冲突信息将导致错误。警告在某些系统上,直接使用 [
–sslPEMKeyPassword](https://www.mongodb.com/zh-cn/docs/database-tools/mongodump/#std-option-mongodump.--sslPEMKeyPassword) 选项提供的密码,可能会被其他用户调用的系统状态程序(如
ps)探测到。可以考虑使用 [
–config`](https://www.mongodb.com/zh-cn/docs/database-tools/mongodump/#std-option-mongodump.--config) 选项,指定一个包含密码的配置文件。 -
--sslCRLFile=<filename>
指定包含证书吊销列表的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。 -
--sslAllowInvalidCertificates
绕过对服务器证书的验证检查并允许使用无效证书。 使用allowInvalidCertificates
设置时,MongoDB 将使用无效证书记录为警告。警告尽管可用,但请尽可能避免使用--sslAllowInvalidCertificates
选项。如果需要使用--sslAllowInvalidCertificates
,请仅在不可能入侵的系统上使用该选项。在未验证服务器证书的情况下,连接到mongod
或mongos
实例存在潜在的安全风险。如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅--sslAllowInvalidHostnames
。或者,也可以直接在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
连接到集群,您可以在以下位置指定您的 AWS 访问密钥 ID:这个字段,connection string
,或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
连接到集群,您可以在以下位置指定您的 AWS 秘密访问密钥:这个字段,connection string
,或AWS_SECRET_ACCESS_KEY
环境变量。请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。警告在某些系统上,直接使用--password
选项提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。请考虑:省略--password
选项,从而接收交互式密码提示,或使用--config
选项指定包含密码的配置文件。 -
--awsSessionToken=<AWS Session Token>
如果使用 连接到MONGODB-AWS
集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:这个字段,AWS_SESSION_TOKEN
的connection string
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-AWS
集群时增加了对 MongoDB Atlas 身份验证机制的支持。值说明SCRAM-SHA-1RFC 5802 使用 SHA-1 哈希函数的标准 Salted Challenge Response Authentication MechanismSCRAM-SHA-256RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism需将 featureCompatibilityVersion 设为4.0
。MONGODB-X509MongoDB 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
并指定冲突信息将导致错误。 -
--collection=<collection>, -c=<collection>
指定要备份的集合。如果不指定集合, 此选项则会将指定数据库或实例中的所有集合复制到转储文件。 - --query=<json>, -q=<json> 提供 JSON 文档作为查询,该查询可选择性地限制 mongodump 输出中包含的文档。要使用 --query 选项,还必须指定 --collection <mongodump --collection> 选项。必须用单引号 ('{ ... }') 括起查询文档,确保它不会与 shell 环境交互。此查询必须采用扩展 JSON v2 格式(宽松模式或规范/严格模式),其中包括用引号将字段名称和操作符括起来。例如:mongodump -d=test -c=records -q='{ "a": { "date": "2016-01-01T00:00:00.000Z" } } }'如要使用
-
--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>
选项一起使用。注意如果mongodump
写入到存档文件中,mongodump
性能可能会提高。有关mongodump
性能影响的更多信息,请参阅输出格式注意事项 -
--oplog
创建一个名为oplog.bson
的文件,作为mongodump
输出的一部分。位于输出目录顶层的oplog.bson
文件包含mongodump
操作期间出现的 oplog 条目。mongodump --oplog
您可以将oplog.bson
与mongorestore --oplogReplay
一起使用,以确保数据是最新的,并且包含转储期间发生的所有写入。如果没有--oplog
,则当转储操作期间有写入操作时,转储将不会反映任何单一时间点。在更新过程中对数据库所做的更改可能会影响备份的输出。要在接受写入的同时备份各个副本集,请使用--oplog
。要使用mongodump
备份分片集群,请参阅使用数据库转储备份分片集群重要如果客户端在转储过程中发出所列的任何操作,则带--oplog
的mongodump
运行会失败。renameCollection
db.collection.renameCollection()
db.collection.aggregate()
,带有$out
mongos
在mongodump
实例上运行--oplog
以转储分片集群的全部内容时,--oplog
仅适用于维护 oplog 的节点。这包括副本集的所有节点。--oplog
不会转储 oplog 集合。注意要将mongodump
与--oplog
一起使用,必须创建副本集节点的完整转储。如果使用以下任一选项限制要转储的数据,则带--oplog
的mongodump
将失败:--db``--collection``--dumpDbUsersAndRoles``--query
提示另请参阅:mongorestore --oplogReplay
-
--dumpDbUsersAndRoles
在特定数据库上执行mongodump
时,应在数据库的转储目录中包含用户和角色定义。仅当在--db
选项中指定数据库时,此选项才会应用。将mongodump
应用于整个实例而非特定数据库时,MongoDB 始终包含用户与角色定义。 -
--excludeCollection=<string>
排除mongodump
输出中指定的集合。如需排除多个集合,请多次指定--excludeCollection
。 -
--excludeCollectionsWithPrefix=<string>
排除mongodump
输出中所有带有指定前缀的集合。如需指定多个前缀,请多次指定--excludeCollectionsWithPrefix
。 -
--numParallelCollections=<int>, -j=<int>
默认: 4mongodump
应并行导出的集合数量。 -
--viewsAsCollections
指定后,mongodump
会将视图导出为集合。注意仅导出视图。默认情况下,mongodump
仅导出视图的元数据。要导出视图中的文档,请使用--viewsAsCollections
选项。对于每个视图,mongodump
都会创建一个 BSON 文件,其中包含该视图中的文档。如果您将mongorestore
与由mongodump
创建的 BSON 文件一起使用,则视图将恢复为集合。如果不包含--viewsAsCollections
,mongodump
会捕捉每个视图的元数据。如果您在mongorestore
操作中包含视图的元数据文件,则该视图会重建。
数据恢复
mongodb使用 mongorestore 命令来恢复备份的数据。
mongorestore程序将数据从mongodump创建的二进制数据库转储或标准输入加载到mongod或mongos实例中。
您可以将从 mongodump 生成的 BSON 文件恢复到与源部署运行相同或更新版本的 MongoDB 部署中。
从系统命令行运行 mongorestore,而非 mongo shell。
MongoDB 不支持为同一集合同时运行多个
mongorestore
程序。
语法
mongorestore
语法:
1 | mongorestore <options> <connection-string> <directory or file to restore> |
---|
常用选项
根据备份时的权限情况,恢复数据时也需要相应的鉴权,即需要用户密码才能恢复数据。
选项 | 含义 | 备注 |
---|---|---|
--help | 返回有关 mongodump 的选项和使用的信息。 | |
--version | 返回 mongorestore 版本号。 | |
--host=<hostname><:port>, -h=<hostname><:port> | 指定 MongoDB 部署的可解析主机名。默认情况下,mongorestore 尝试连接到在本地主机端口号 27017 上运行的 MongoDB 实例。 | 默认:localhost:27017 |
--port=<port> | 指定 MongoDB 实例侦听客户端连接的 TCP 端口。 | 默认: 27017 |
--username=<username>, -u=<username> | 指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。 | |
--password=<password>, -p=<password> | 指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。 | |
--db=<database>, -d=<database> | 指定从BSON 文件恢复时,mongorestore 将数据恢复到其中 的目标数据库。如果该数据库不存在,mongorestore 将创建该数据库。 | |
--collection=<collection>, -c=<collection> | 指定从 BSON 文件恢复数据时mongorestore将数据恢复到其中的目标集合的名称。 | |
--dir=string | 指定转储目录。 |
详细选项
-
--help
返回有关mongorestore
的选项和使用的信息。 -
--verbose, -v
增加标准输出或日志文件中返回的内部报告数量。通过包括多个-v
选项来提高详细程度,(例如-vvvvv
。) -
--quiet
在尝试限制输出量的安静模式下运行mongorestore
。该选项会抑制:数据库命令复制活动连接接受事件连接关闭事件 -
--version
返回mongorestore
版本号。 -
--config=<filename>
版本 100.3.0 中的新增内容。指定包含以下mongorestore
选项的敏感值的 YAML 配置文件的完整路径:--password
--uri
--sslPEMKeyPassword
除通过密码提示来指定密码之外,这是为mongorestore
指定密码的另一推荐方法。配置文件采用以下形式:password: <password>uri: mongodb://mongodb0.example.com:27017sslPEMKeyPassword: <password>
向password:
字段指定密码并在uri:
字段中提供包含冲突密码的连接字符串将导致错误。请务必使用相应的文件系统权限保护此文件。注意如果使用--config
来指定配置文件,并使用--password
、--uri
或--sslPEMKeyPassword
选项来mongorestore
,那么每个命令行选项均会覆盖其在配置文件中的相应选项。 -
--uri=<connectionString>
指定 MongoDB 部署的可解析URI 连接字符串,用引号引起来:--uri="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]"
从mongorestore
的100.0
版本开始,也可以将连接字符串作为位置参数提供,而无需使用--uri
选项:mongorestore mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
作为位置参数,可以在命令行上的任何位置指定连接字符串,前提是它以mongodb://
或mongodb srv://
开头。例如:mongorestore --username joe --password secret1 mongodb://mongodb0.example.com:27017 --ssl
只能提供一个连接字符串。无论是使用--uri
选项还是作为位置参数,尝试纳入多个连接字符串都会导致错误。有关连接字符串组件的信息,请参阅连接字符串 URI 格式文档。注意connection string
中的某些组件也可以使用各自的显式命令行选项来指定,例如--username
和--password
。在提供连接字符串的同时,使用显式选项并指定冲突信息会导致错误。注意如果是在 Ubuntu 18.04 上使用mongorestore
,则在使用带mongodb srv://
选项的 (采用cannot unmarshal DNS
格式)时,可能会出现错误消息。如果是这样,请改用以下选项之一:带有``(格式为 )的mongodb://
选项--host
选项指定直接连接的主机警告在某些系统上,使用--uri
选项在连接字符串中提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。请考虑:在连接字符串中省略密码,接收交互式密码提示,或者使用--config
选项指定包含密码的配置文件。 -
--host=<hostname><:port>, -h=<hostname><:port>
默认:localhost:27017指定 MongoDB 部署的可解析主机名。默认情况下,mongorestore
尝试连接到在本地主机端口号27017
上运行的 MongoDB 实例。要连接到副本集,请指定replSetName
和副本集成员的种子列表,如下所示:--host=<replSetName>/<hostname1><:port>,<hostname2><:port>,<...>
指定副本集列表格式时,mongorestore
始终连接到主节点还可以通过仅指定该成员的主机和端口来连接至副本集的任何单个成员:--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
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。 -
--sslCAFile=<filename>
指定包含来自证书颁发机构的根证书链的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。或者,也可以直接在.pem
中指定URI connection string
文件。在提供连接字符串的同时使用--sslCAFile
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。 -
--sslPEMKeyFile=<filename>
指定同时包含 TLS/SSL 证书和密钥的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。使用--ssl
选项连接到已启用](https://www.mongodb.com/zh-cn/docs/manual/reference/program/mongod/#mongodb-binary-bin.mongod)启用[
的CAFile
或且未时,需要使用此选项。allowConnectionsWithoutCertificates
或者,也可以直接在.pem
中指定URI connection string
文件。在提供连接字符串的同时使用--sslPEMKeyFile
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。 -
--sslPEMKeyPassword=<value>
指定解密证书密钥文件的密码(即--sslPEMKeyFile
)。仅当证书密钥文件已加密时才能使用--sslPEMKeyPassword
选项。在所有情况下,mongorestore
都会对所有日志记录和报告输出中的密码进行脱敏。如果 PEM 文件中的私钥已加密,并且您未指定--sslPEMKeyPassword
选项,mongorestore
将提示输入密码。请参阅 TLS/SSL 证书密码或者,您也可以直接在URI connection string
中指定密码。在提供连接字符串的同时使用--sslPEMKeyPassword
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。警告在某些系统上,直接使用--sslPEMKeyPassword
选项提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。可以考虑使用--config
选项,指定一个包含密码的配置文件。 -
--sslCRLFile=<filename>
指定包含证书吊销列表的.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。 -
--sslAllowInvalidCertificates
绕过对服务器证书的验证检查并允许使用无效证书。 使用allowInvalidCertificates
设置时,MongoDB 将使用无效证书记录为警告。警告尽管可用,但请尽可能避免使用--sslAllowInvalidCertificates
选项。如果需要使用--sslAllowInvalidCertificates
,请仅在不可能入侵的系统上使用该选项。在未验证服务器证书的情况下,连接到mongod
或mongos
实例存在潜在的安全风险。如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅--sslAllowInvalidHostnames
。或者,也可以直接在URI connection string
中禁用证书验证。在提供连接字符串的同时使用--sslAllowInvalidCertificates
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。 -
--sslAllowInvalidHostnames
禁用 TLS/SSL 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持mongorestore
连接到 MongoDB 实例。或者,您也可以直接在URI connection string
中禁用主机名验证。在提供连接字符串的同时使用--sslAllowInvalidHostnames
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos以及客户端的 TLS/SSL 配置。 -
--username=<username>, -u=<username>
指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与--password
和--authenticationDatabase
选项配合使用。或者,也可直接在URI connection string
中指定用户名。在提供连接字符串的同时使用--username
并指定冲突信息将导致错误。如果使用MONGODB-AWS
连接到 ``集群,您可以在以下位置指定您的 AWS 访问密钥 ID:这个字段,connection string
,或AWS_ACCESS_KEY_ID
环境变量。请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。 -
--password=<password>, -p=<password>
指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与--username
和--authenticationDatabase
选项结合使用。如要提示用户输入密码,可使用不带--password
的--username
选项,或指定空字符串作为--password
值,如--password=""
。或者,您也可以直接在URI connection string
中指定密码。在提供连接字符串的同时使用--password
并指定冲突信息将导致错误。如果使用MONGODB-AWS
连接到集群,您可以在以下位置指定您的 AWS 秘密访问密钥:这个字段,connection string
,或AWS_SECRET_ACCESS_KEY
环境变量。请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。警告在某些系统上,直接使用--password
选项提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。请考虑:省略--password
选项,从而接收交互式密码提示,或使用--config
选项指定包含密码的配置文件。 -
--awsSessionToken=<AWS Session Token>
如果使用 连接到MONGODB-AWS
集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:这个字段,AWS_SESSION_TOKEN
的connection string
authMechanismProperties
参数,或AWS_SESSION_TOKEN
环境变量。请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。仅在使用MONGODB-AWS
authentication mechanism
-
--authenticationDatabase=<dbname>
指定已创建指定--username
的身份验证数据库。请参阅身份验证数据库如果使用的是 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或MONGODB-AWS
authentication mechanisms
,则须将--authenticationDatabase
设为$external
。或者,也可以直接在URI connection string
中指定身份验证数据库。在提供连接字符串的同时使用--authenticationDatabase
并指定冲突信息将导致错误。 -
--authenticationMechanism=<name>
默认值:SCRAM-SHA-1指定mongorestore
实例用来向mongod
或mongos
在版本 100.1.0 中进行了更改:从版本100.1.0
开始,mongorestore
在连接到MONGODB-AWS
集群时增加了对 MongoDB Atlas 身份验证机制的支持。值说明SCRAM-SHA-1RFC 5802 使用 SHA-1 哈希函数的标准 Salted Challenge Response Authentication MechanismSCRAM-SHA-256RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism需将 featureCompatibilityVersion 设为4.0
。MONGODB-X509MongoDB 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=<serviceName>
使用 GSSAPI/Kerberos 指定服务名称。仅当服务未使用默认名称mongodb
时才需要。此选项仅在 MongoDB Enterprise 中可用。 -
--gssapiHostName=<hostname>
使用GSSAPI/Kerberos指定服务的主机名。仅当计算机的主机名与 DNS 解析的主机名不匹配时才需要。此选项仅在 MongoDB Enterprise 中可用。 -
--db=<database>, -d=<database>
指定从BSON 文件恢复时,mongorestore
将数据恢复到其中 的目标数据库。如果该数据库不存在,mongorestore
将创建该数据库。例如,以下示例将salaries
集合恢复到reporting
数据库中。mongorestore --db=reporting dump/test/salaries.bson
如果不指定--db
,mongorestore
将从数据文件中读取数据库名称。从目录或存档文件恢复时,不建议使用--db
和--collection
选项。 相反,要从存档或目录中恢复,请参阅--nsInclude
。或者也可以直接在URI connection string
中指定数据库。在提供连接字符串的同时使用--db
并指定冲突信息将导致错误。 -
--collection=<collection>, -c=<collection>
指定从 BSON 文件恢复数据时mongorestore
将数据恢复到其中的目标集合的名称。 如果您不指定--collection
,则mongorestore
将从输入文件名中获取集合名称。 如果输入文件包含扩展名,MongoDB 将从集合名称中省略文件的扩展名。mongorestore --db=reporting --collection=employeesalaries dump/test/salaries.bson
从目录或存档文件恢复时,不建议使用--db
和--collection
选项。 相反,要从存档或目录中恢复,请参阅--nsInclude
。 -
--nsExclude=<namespace pattern>
指定命名空间模式(例如"test.myCollection"
、"reporting.*"
、"dept*.bar"
)从恢复中排除匹配的命名空间。 在该模式中,您可以使用星号*
作为通配符。 有关通配符模式的示例,请参阅使用通配符恢复集合。您可以多次指定--nsExclude
以排除多个命名空间模式。 -
--nsInclude=<namespace pattern>
指定命名空间模式(例如"test.myCollection"
、"reporting.*"
、"dept*.bar"
)仅恢复与模式匹配的命名空间。 在该模式中,您可以使用星号*
作为通配符。 有关通配符模式的示例,请参阅使用通配符恢复集合。您可以多次指定--nsInclude
以包含多个命名空间模式。如果源目录或文件(即恢复数据的目录/文件) 不包含与命名空间模式匹配的数据文件, 则不会恢复任何数据。对于包含非 ASCII 字符的集合名称,mongodump
会用百分比编码名称输出相应的文件名称。但是要恢复这些集合,请勿使用编码名称。相反,应使用包含非 ASCII 字符的命名空间。例如,如果转储目录包含dump/test/cafés.bson
,请指定--nsInclude "test.cafés"
。 -
--nsFrom=<namespace pattern>
与--nsTo
一起使用可在恢复操作期间重命名命名空间。--nsFrom
指定转储文件中的集合,而--nsTo
指定应在还原的数据库中使用的名称。--nsFrom
接受命名空间模式作为其参数。 命名空间模式允许--nsFrom
引用与指定模式匹配的任何命名空间。mongorestore
匹配命名空间模式的最小有效出现次数。对于简单的替换,使用星号 (*
) 作为通配符。用反斜杠转义所有字面星号和反斜杠。替换与匹配线性对应:--nsFrom
中的每个星号必须对应于--nsTo
中的一个星号,并且--nsFrom
中的第一个星号与nsTo
中的第一个星号匹配。对于更复杂的替换,请使用美元符号来界定要在替换中使用的“通配符”变量。 在恢复期间更改集合命名空间提供了使用以美元符号分隔的通配符进行复杂替换的示例。与星号的替换不同,美元符号分隔的通配符的替换不需要是线性的。 -
--nsTo=<namespace pattern>
与--nsFrom
一起使用可在恢复操作期间重命名命名空间。--nsTo
指定要在恢复的数据库中使用的新集合名称,而--nsFrom
指定转储文件中的名称。--nsTo
接受命名空间模式作为其参数。 命名空间模式允许--nsTo
引用与指定模式匹配的任何命名空间。mongorestore
匹配命名空间模式的最小有效出现次数。对于简单的替换,使用星号 (*
) 作为通配符。用反斜杠转义所有字面星号和反斜杠。替换与匹配线性对应:--nsFrom
中的每个星号必须对应于--nsTo
中的一个星号,并且--nsFrom
中的第一个星号与nsTo
中的第一个星号匹配。对于更复杂的替换,请使用美元符号来界定要在替换中使用的“通配符”变量。 在恢复期间更改集合命名空间提供了使用以美元符号分隔的通配符进行复杂替换的示例。与星号的替换不同,美元符号分隔的通配符的替换不需要是线性的。 -
--objcheck
强制mongorestore
在收到客户端的所有请求后进行验证,以确保客户端永远不会将无效文档插入到数据库中。 对于子文档嵌套程度较高的对象,--objcheck
对性能的影响很小。 -
--drop
从转储的备份中恢复集合之前,请从目标数据库中删除集合。--drop
不会删除不在备份中的集合。当恢复包括admin
数据库时,mongorestore
和--drop
会删除所有用户档案,并将其替换为转储文件中定义的用户。 因此,在启用了authorization
的系统中,mongorestore
必须能够对现有用户和转储文件中定义的用户进行身份验证。 如果mongorestore
无法对转储文件中定义的用户进行身份验证,恢复进程就会失败,从而产生空数据库。如果在恢复过程中删除并重新创建集合,则新创建的集合具有不同的 UUID,除非--drop
与--preserveUUID
一起使用。 -
--preserveUUID
已恢复的集合使用恢复数据中的 UUID, 而不会为在恢复过程中删除并重新创建的集合创建新的 UUID。要使用--preserveUUID
,还必须包含--drop
选项。 -
--dryRun
运行mongorestore
,而不实际导入任何数据,将返回mongorestore
摘要信息。与--verbose
一起使用可生成更详细的摘要信息。 -
--oplogReplay
恢复数据库转储后,从 oplog 文件重放oplog.bson
条目。要在恢复中应用oplog.bson
文件中的 oplog 条目,请使用mongorestore --oplogReplay
。您可以将mongodump --oplog
与mongorestore --oplogReplay
一起使用,以确保数据是最新的,并且包含转储操作期间发生的所有写入。mongorestore
在以下位置搜索 bson 文件的任何有效来源:转储目录的顶层,比如使用mongodump --oplog
创建的转储。--oplogFile
指定的路径。<dump-directory>/local/oplog.rs.bson
,例如将local
数据库中的oplog.rs
集合转储到副本集节点mongod
上。如果转储目录的顶层存在oplog.bson
文件,且路径由--oplogFile
指定,则mongorestore
将返回错误。如果转储目录的顶层有oplog.bson
文件,则mongorestore
会将该文件恢复为 oplog。如果dump/local
目录中还有 bson 文件,mongorestore
会将该文件恢复为普通集合。如果您使用--oplogFile
指定 oplog 文件,mongorestore
会将该文件恢复为 oplog。 如果dump/local
目录中还有BSON文件,mongorestore
会将其恢复为普通集合。oplog 重放输出中的以下消息显示 oplog 重放之前插入的数量。 它不包括重放期间 执行的插入。0 document(s) restored successfully. 0 document(s) failed torestore.
有关--oplogReplay
的示例,请参阅使用 Oplog 文件备份和还原数据注意将mongorestore
与--oplogReplay
一起使用来恢复副本集时,必须恢复使用 创建的 副本集mongodump --oplog
成员的完整转储。如果使用以下任一选项来限制要恢复的数据,则mongorestore
和--oplogReplay
都会失败:--db
--collection
--nsInclude
--nsExclude
提示另请参阅:mongorestore 所需访问权限mongodump --oplog
-
--oplogLimit=<timestamp>
防止mongorestore
应用时间戳晚于或等于oplog的<timestamp>
条目。 以<time_t>:<ordinal>
的形式指定<timestamp>
值,其中<time_t>
是自 UNIX 纪元以来的秒数,<ordinal>
表示在指定秒内发生的 oplog 中的操作计数器。警告请谨慎使用oplogLimit
:手动指定要应用的 oplog 条目可能会导致还原数据损坏和不一致。必须将--oplogLimit
与--oplogReplay
选项结合使用。 -
--oplogFile=<path>
指定包含用于恢复的 oplog 数据的 oplog 文件的路径。 与--oplogReplay
一起使用。如果指定--oplogFile
且转储目录的顶层存在oplog.bson
文件,则mongorestore
会返回错误。警告请谨慎使用oplogFile
:手动指定要应用的 oplog 条目可能会导致还原数据损坏和不一致。 -
--convertLegacyIndexes
100.0.0 版本新增。删除相应的mongodump
输出中指定的任何无效索引选项,并重写所有旧版索引键值以使用有效值。无效索引选项 是为索引指定的任何选项,但未列为 命令的 有效字段createIndexes
。例如,name
和collation
有效,但任意custom_field
无效。 指定--convertLegacyIndexes
后,将删除所有找到的无效索引选项。传统索引键值是不再支持的索引类型的任何值。 例如,1
和-1
是有效的索引键值,但0
或空string是旧值。 指定--convertLegacyIndexes
后,找到的任何旧索引键值都将被重写为1
。 非空string值不会被替换。如果不指定--convertLegacyIndexes
选项,则无效索引选项或传统索引键值的存在可能会导致索引构建失败。如果将--noIndexRestore
选项指定为mongorestore
,则忽略--convertLegacyIndexes
选项。 -
--keepIndexVersion
防止mongorestore
在恢复过程中将索引升级到最新版本。 -
--noIndexRestore
防止mongorestore
按照相应mongodump
输出中的指定方式来恢复和构建索引。 -
--fixDottedHashIndex
在目标数据库上将虚线字段上的所有哈希索引创建为单字段升序索引。 -
--noOptionsRestore
防止mongorestore
在恢复的集合上设置集合选项,例如collMod
数据库命令指定的选项。 -
--restoreDbUsersAndRoles
恢复给定数据库的用户和角色定义。有关更多信息,请参阅system.roles 集合和system.users 集合。注意--restoreDbUsersAndRoles
如果为admin
选项指定--db
数据库,则无法使用 } 选项,尝试这样做会导致错误。通过将mongorestore
指定为--db admin
来恢复admin
数据库已恢复所有用户和角色。 -
--writeConcern=<document>
默认:多数为写关注执行的每个写入操作指定mongorestore
。使用w 选项将写关注指定为文档:--writeConcern="{w:'majority'}"
如果写关注也包含在--uri connection string
中,则命令行--writeConcern
将覆盖 URI string中指定的写关注。 -
--maintainInsertionOrder
默认:false如果已指定,mongorestore
则会按照这些文档在输入源中出现的顺序将其插入。也就是说,批量写入批处理顺序和批处理中的文档顺序都将保持不变。指定--maintainInsertionOrder
还会启用--stopOnError
并将numInsertionWorkersPerCollection
设置为 1。如果未指定,mongorestore
则可能会按任意顺序执行插入。 -
--numParallelCollections=<int>, -j=<int>
默认: 4mongorestore
应并行恢复的集合数量。如果在恢复-j
集合时指定单个 ,则-j
会映射到--numInsertionWorkersPerCollection
选项,而不是--numParallelCollections
。 -
--numInsertionWorkersPerCollection=<int>
默认: 1指定每个集合要同时运行的插入工作线程数。对于大型导入,增加插入工作线程的数量可以提高导入的速度。 -
--stopOnError
出误时强制mongorestore
停止恢复。默认情况下,mongorestore
会在遇到重复键和文档验证错误时继续。 为确保程序在出现这些错误时停止运行,请指定--stopOnError
。 -
--bypassDocumentValidation
启用mongorestore
可在操作期间绕过文档验证。这样,您就可以插入不符合验证要求的文档。如果要恢复启用了可查询加密的集合,则需要此选项。 -
--gzip
从mongodump --gzip
要从包含压缩文件的转储目录恢复,请运行带有--gzip
选项的mongorestore
。要从压缩的存档文件中恢复,请运行带有mongorestore
--gzip
和 选项的--archive
。注意您可以使用--nsFrom
和--nsTo
选项以及--gzip
选项来更改要恢复的集合的命名空间。 -
--archive=<file>
从指定的存档文件进行恢复;或者,如果未指定此文件,则从标准输入 (stdin
) 恢复:要从存档文件恢复,请运行带--archive
选项和存档文件名的mongorestore
要从标准输入恢复,请运行带--archive
选项的mongorestore
,但忽略 文件名。注意不能将--archive
选项与--dir
选项一起使用。如果将--archive
选项与``参数一起使用,mongorestore
将忽略<path>
参数。mongorestore
仍然支持位置-
参数,以从标准输入恢复单个集合。 -
<path>
要从中恢复数据的目录路径或 BSON 文件名称。不能同时将<path>
参数和--dir
选项(也指定转储目录)指定为mongorestore
。 -
--dir=string
指定转储目录。您不能同时将--dir
选项和<path>
参数(也指定转储目录)指定为mongorestore
。不能将--archive
选项与--dir
选项一起使用。
参考资料
- https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html
- https://www.mongodb.com/zh-cn/docs/database-tools/bsondump/