对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

mongodump 行为、访问权限和使用

警告

转储到不区分大小写的文件系统(例如Windows或 macOS)时,名称仅大小写不同的集合将被覆盖。 对于不区分大小写的文件系统,请始终使用--archive选项。

警告

字段中带有 $ 前缀的数据转储和恢复冲突

从MongoDB 5.0开始,文档字段名称可以以美元字符 ( $ ) 作为前缀。 但是, mongodump和mongorestore不适用于集合选项中以美元字符为前缀的字段名称。

MongoDB扩展JSON (v 2 )无法区分类型包装器和与类型包装器同名的字段。 如果相应的BSON表示形式可能包含$前缀键,请勿使用扩展JSON格式。 DBRefs机制是该一般规则的例外。

当MongoDB URI 中未指定authSource时, --db中指定的数据库名称将用于验证mongodump会话并指示要转储的数据库。 有关在使用mongodump时使用不同数据库进行身份验证的示例,请参阅使用特定数据库进行身份验证。

使用 mongorestore 加载由 mongodump 创建的数据文件时,源部署和目标部署的 MongoDB 版本必须是以下任一版本:

  • 同一主要版本。

  • 同一特征兼容性版本。

例如,如果转储是通过运行版本 4.4 的 MongoDB 部署创建的,那么恢复到的 MongoDB 部署也必须运行版本 4.4 或将其 FCV 设置为 4.4。

如要更改特征兼容性版本,请参阅 setFeatureCompatibilityVersion。

注意

您可以将从 mongodump 生成的 BSON 文件恢复到与源部署运行相同或更新版本的 MongoDB 部署中。然而,在较新版本的部署中恢复文件并不是升级部署的推荐方法。要了解如何升级部署,请参阅升级文档。

此保证不适用于元数据、存档或 oplog 重放文件。如果尝试使用不同的源部署版本和目标部署版本恢复这些文件,则 mongorestore 进程可能会导致故障、静默故障或元数据损坏。

此外,请务必使用与创建数据文件时所用 mongodump 版本相同的 mongorestore 版本来加载这些数据文件。实际上,使用不同版本的 mongorestore 通常可以正常工作,但如果转储格式在不同版本之间发生变化,则恢复可能会失败或错误地恢复数据。示例,如果使用 mongodump 版本 100.20.1 创建转储,则使用 mongorestore 版本 100.20.1 恢复。

要从 MongoDB 9.0 部署中转储 时间序列集合,请使用 Database Tools 100.16.0 或更新版本。早期的 Database Tools 版本直接读取时间序列桶命名空间,而 MongoDB 9.0 不允许这种操作。如果使用早期的 Database Tools 版本,mongodump 将中止并报告 CommandNotSupportedOnLegacyTimeseriesBucketsNamespace 错误。要解决此错误,请升级到最新版本的 Database Tools。

如果在 mongodump 读取时间序列集合时开始时间序列格式转换,则操作失败并出现 InterruptedDueToTimeseriesUpgradeDowngrade 错误。转储未被截断或损坏。要解决该错误,请等待功能兼容性版本 (FCV) 更改完成,然后再次运行 mongodump。要了解有关转换的更多信息,请参阅跨时间序列格式转换的 Oplog 重播。

默认, mongodump使用读取偏好(read preference)primary 。 要覆盖默认,您可以在 命令行选项或 --readPreference中指定 读取偏好(read preference)--uri connection string 。

如果 URI 字符串和 --readPreference 选项中均指定了读取偏好,则 --readPreference 值将覆盖 URI 字符串中指定的读取偏好。

如果同时指定--db和--collection选项, mongodump则会转储指定的集合。

如果您仅指定 --db 选项,mongodump 会转储该数据库并排除以下内容:

  • 如果--db的值为admin :

    • 如果未连接到 Atlas 代理,则 mongodump 会转储数据库,但排除 system.keys 集合。

    • 如果您连接到 Atlas 代理,则mongodump 尝试转储数据库但会出错。

  • 如果 --db 的值为 config ,则 mongodump 会转储该数据库中的所有集合。

  • 如果 --db 的值为 local ,则 mongodump 会转储该数据库中的所有集合。

  • 对于所有其他数据库, mongodump排除所有以system.开头的集合, system.js除外。

如果您省略 --db 选项,则适用以下排除:

  • mongodump 排除 local 数据库。

  • mongodump 仅在config数据库的输出中包含以下集合:

    • chunks

    • collections

    • databases

    • settings

    • shards

    • tags

    • version

  • 如果您已连接到Atlas代理,则mongodump会排除admin数据库。

mongodump 输出:

  • 包含数据库中的文档和索引定义。

  • 不包含索引数据。

mongorestore或mongod必须在恢复数据后重建索引。

如果您使用视图:

如果 mongodump 输出到目录,输出将包含集合元数据,其中包括以下属性:

  • 集合名称

  • 集合类型

  • 集合配置选项

  • UUID

  • 索引

如果 mongodump 输出到标准输出 (stdout),则输出不包含元数据。有关更多信息,请参阅 --out 选项。

mongodump 对元数据文件使用扩展 JSON v 2.0 (规范)格式。 要解析这些文件以进行恢复,请使用mongorestore ,它支持扩展 JSON v 2 。 0 (规范或宽松模式)格式。

mongodump 如果输出文件存在于备份数据文件夹中,则会覆盖这些文件。 在多次运行mongodump命令之前,请确保不再需要输出文件夹(默认为dump/文件夹)中的文件,或者重命名这些文件夹或文件。

mongodump 出现以下情况则失败:

在使用WiredTiger存储引擎的mongod实例上运行时, mongodump会输出未压缩数据。

mongodump 可能会对mongod的性能产生不利影响。 如果数据大于系统内存, mongodump会将工作集挤出内存。

mongodump 自动创建与配置为使用 FIPS模式的mongod或mongos的符合 FIPS 标准的连接。

在免费 (M0) 和共享(M2 和 M5)层 Atlas 集群上,适用以下限制:

  • 无法在 admin 数据库上运行 mongodump。默认情况下,mongodump 跳过此数据库。如果使用 --db 选项将目标数据库设置为 admin,程序将返回错误消息。

  • 不能将以下选项与 mongodump 程序一起使用:

mongodump 在从 Atlas Infinite 数据库集群转储数据时,支持 --oplog 选项。oplog 重播在 Atlas Infinite 数据库集群上不受支持。有关详情,请参阅 mongorestore 行为、访问和使用。

注意

目标集群回滚

如果集群在恢复进程中发生回滚,删除所有恢复或导入的数据,然后从头开始重做该进程。 有关更多详细信息,请参阅回滚文档。

要针对已启用访问权限控制的MongoDB 部署运行mongodump ,您必须具有为每个要备份的数据库授予find动作的特权。 内置backup角色提供执行任一和所有数据库备份所需的特权。

对于独立运行或副本集,mongodump 可以作为备份策略的一部分,mongorestore 用于基于查询的部分备份、从生产环境同步到暂存或开发环境或更改独立运行的存储引擎。

有关将mongodump与mongorestore结合使用作为备份和恢复策略的一部分的详细信息,请参阅:

要使用mongodump和mongorestore作为分分片的集群的备份策略,请参阅使用数据库转储备份自管理分片集群。

分片集群还可以使用以下协调备份和恢复进程之一,保证跨分片的原子性,同时仍然接受写入: