MongoDB 备份与恢复

2024-08-22 15:45:58 浏览数 (2)

在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]]"mongodump100.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 支持的 mongodmongos 的连接。或者,也可以直接在URI connection string 中配置 TLS/SSL 支持。在提供连接字符串的同时使用 --ssl 并指定冲突信息将导致错误。
  • --sslCAFile=<filename> 指定包含来自证书颁发机构的根证书链的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。或者,也可以直接在 .pem 中指定 URI connection string 文件。在提供连接字符串的同时使用 --sslCAFile 并指定冲突信息将导致错误。
  • --sslPEMKeyFile=<filename> 指定同时包含 TLS/SSL 证书和密钥的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。使用--ssl选项连接到启用了mongodmongosCAFile没有时,需要使用此选项。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,请仅在不可能入侵的系统上使用该选项。在未验证服务器证书的情况下,连接到 mongodmongos 实例存在潜在的安全风险。如果只需禁用 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_TOKENconnection string authMechanismProperties 参数,或AWS_SESSION_TOKEN 环境变量。请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。仅在使用 MONGODB-AWSauthentication 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 实例用来向 mongodmongos 进行身份验证的身份验证机制。在版本 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> 选项和存档文件名的 mongodumpmongodump --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.bsonmongorestore --oplogReplay 一起使用,以确保数据是最新的,并且包含转储期间发生的所有写入。如果没有 --oplog,则当转储操作期间有写入操作时,转储将不会反映任何单一时间点。在更新过程中对数据库所做的更改可能会影响备份的输出。要在接受写入的同时备份各个副本集,请使用 --oplog。要使用 mongodump 备份分片集群,请参阅使用数据库转储备份分片集群重要如果客户端在转储过程中发出所列的任何操作,则带 --oplogmongodump 运行会失败。renameCollectiondb.collection.renameCollection()db.collection.aggregate(),带有 $outmongosmongodump 实例上运行 --oplog 以转储分片集群的全部内容时,--oplog 仅适用于维护 oplog 的节点。这包括副本集的所有节点。--oplog不会转储 oplog 集合。注意要将 mongodump--oplog 一起使用,必须创建副本集节点的完整转储。如果使用以下任一选项限制要转储的数据,则带 --oplogmongodump 将失败:--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 文件一起使用,则视图将恢复为集合。如果包含 --viewsAsCollectionsmongodump 会捕捉每个视图的元数据。如果您在 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]]"mongorestore100.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 支持的 mongodmongos。或者,也可以直接在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,请仅在不可能入侵的系统上使用该选项。在未验证服务器证书的情况下,连接到 mongodmongos 实例存在潜在的安全风险。如果只需禁用 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_TOKENconnection string authMechanismProperties 参数,或AWS_SESSION_TOKEN 环境变量。请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。仅在使用 MONGODB-AWSauthentication 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 实例用来向 mongodmongos在版本 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如果不指定--dbmongorestore将从数据文件中读取数据库名称。从目录或存档文件恢复时,不建议使用--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 --oplogmongorestore --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。例如, namecollation有效,但任意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可在操作期间绕过文档验证。这样,您就可以插入不符合验证要求的文档。如果要恢复启用了可查询加密的集合,则需要此选项。
  • --gzipmongodump --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/

0 人点赞