警告
当转储到不区分大小写的文件系统(例如 Windows 或 macOS)时,仅按照大小写区分名称的集合将被重写。对于不区分大小写的文件系统,始终使用 --archive 选项。
警告
字段中带有 $ 前缀的数据转储和恢复冲突
从MongoDB 5.0开始,文档字段名称可以以美元字符 ( $ ) 作为前缀。 但是, mongodump和mongorestore不适用于集合选项中以美元字符为前缀的字段名称。
MongoDB扩展JSON2 (v) 无法区分类型包装器和与类型包装器同名的字段。如果相应的BSON表示形式可能包含 前缀键,请勿使用扩展JSON格式。$ DBRefs 机制是该一般规则的例外。
行为
在没有 authSource 的情况下使用 mongodump
authSource当MongoDB URI 中未指定 时, 中指定的数据库名称将用于验证--db mongodump会话并指示要转储的数据库。有关在使用mongodump 时使用不同数据库进行身份验证的示例,请参阅使用特定数据库进行身份验证。
恢复到匹配的服务器版本
使用 mongorestore 加载由 mongodump 创建的数据文件时,源部署和目标部署的 MongoDB 版本必须是以下任一版本:
同一主要版本。
同一特征兼容性版本。
例如,如果转储是通过运行版本 4.4 的 MongoDB 部署创建的,那么恢复到的 MongoDB 部署也必须运行版本 4.4 或将其 FCV 设置为 4.4。
要更改特征兼容性版本,请参阅setFeatureCompatibilityVersion 。
注意
您可以将从 mongodump 生成的 BSON 文件恢复到与源部署运行相同或更新版本的 MongoDB 部署中。然而,在较新版本的部署中恢复文件并不是升级部署的推荐方法。要了解如何升级部署,请参阅升级文档。
此保证不适用于元数据、存档或 oplog 重放文件。如果尝试使用不同的源部署版本和目标部署版本恢复这些文件,则 mongorestore 进程可能会导致故障、静默故障或元数据损坏。
此外,确保加载数据文件时使用的 mongorestore 版本与创建数据文件时使用的 mongodump 版本相同。实际上,使用不同版本的 mongorestore 通常可行,但如果转储格式在版本之间发生变化,则恢复可能会失败或错误地恢复数据。示例,如果使用 mongodump 版本 100.19.0 创建转储,请使用 mongorestore 版本 100.19.0 来恢复转储。
时间序列集合
要从MongoDB.9 0部署中转储时间序列集合,请使用Database Tools..100 160或更高版本。早期的Database Tools版本会直接读取时间序列存储桶命名空间,而MongoDB.9 0不允许这样做。如果使用较早的Database Tools版本,则mongodump 会中止并显示CommandNotSupportedOnLegacyTimeseriesBucketsNamespace 错误。要解决此错误,升级到最新的Database Tools版本。
如果在 mongodump 读取时间序列集合时开始时间序列格式转换,则操作失败并出现 InterruptedDueToTimeseriesUpgradeDowngrade 错误。转储未被截断或损坏。要解决该错误,请等待功能兼容性版本 (FCV) 更改完成,然后再次运行 mongodump。要了解有关转换的更多信息,请参阅跨时间序列格式转换的 Oplog 重播。
读取偏好
默认情况下,mongodump 使用读取偏好(read preference)primary。如需覆盖默认值,您可以在 命令行选项中指定 读取偏好(read preference) --readPreference,或在--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数据库的输出中包含以下集合:chunkscollectionsdatabasessettingsshardstagsversion
如果您已连接到Atlas代理,则
mongodump会排除admin数据库。
mongodump 输出:
包含数据库中的文档和索引定义。
不包含索引数据。
mongorestore或mongod 必须在恢复数据后重建索引。
如果您使用视图:
要导出视图中的文档,请使用
--viewsAsCollections。
Metadata Output
如果 mongodump 输出到目录,输出将包含集合元数据,其中包括以下属性:
集合名称
集合类型
集合配置选项
UUID
索引
如果 mongodump 输出到标准输出 (stdout),则输出不包含元数据。有关更多信息,请参阅 --out 选项。
Metadata Format
mongodump 对元数据文件使用扩展JSON2 v.0 (规范)格式。要解析这些文件以进行恢复,请使用mongorestore ,它支持扩展JSON2 v.0 (规范或宽松模式)格式。
覆盖文件
mongodump 如果输出文件存在于备份数据文件夹中,则会覆盖这些文件。 在多次运行mongodump命令之前,请确保不再需要输出文件夹(默认为dump/文件夹)中的文件,或者重命名这些文件夹或文件。
mongodump 重新分片期间
mongodump 出现以下情况则失败:
mongodump在进行重新分片操作时启动。reshardCollection命令在mongodump操作期间运行。
数据压缩处理
mongod在使用WiredTiger存储引擎的 实例上运行时,mongodump 会输出未压缩数据。
工作集
mongodump 可能会对mongod的性能产生不利影响。 如果数据大于系统内存, mongodump会将工作集挤出内存。
FIPS
mongodump 自动创建与配置为使用 FIPS模式的mongod或mongos的符合 FIPS 标准的连接。
在Atlas免费层级和共享层级集群上使用 mongodump
在免费 (M0) 和共享(M2 和 M5)层 Atlas 集群上,适用以下限制:
无法在
admin数据库上运行mongodump。默认情况下,mongodump跳过此数据库。如果使用--db选项将目标数据库设置为admin,程序将返回错误消息。不能将以下选项与
mongodump程序一起使用:
必需的访问权限
mongodump要针对已启用访问权限控制的MongoDB 部署运行 ,您必须具有为每个要备份的数据库授予find 动作的特权。内置backup 角色提供执行任一和所有数据库备份所需的特权。
在备份策略中的用法
独立运行部署和副本集
对于独立运行或副本集,mongodump 可以作为备份策略的一部分,与 mongorestore一起用于基于查询的部分备份,从生产环境同步到暂存或开发环境,或者更改独立运行的存储引擎。
有关将mongodump与mongorestore结合使用作为备份和恢复策略的一部分的详细信息,请参阅:
分片集群
要使用mongodump和mongorestore作为分分片的集群的备份策略,请参阅使用数据库转储备份自管理分片集群。
分片集群还可以使用以下协调备份和恢复进程之一,保证跨分片的原子性,同时仍然接受写入: