Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

使用MongoDB工具备份和恢复自管理部署

本教程介绍如何使用 mongodumpmongorestore 创建备份并恢复数据。

如要将自托管部署的备份恢复到托管的 MongoDB Atlas 部署 ,请参阅使用 mongorestore 填充数据。

mongorestoremongodump 实用程序与 BSON 数据转储配合,可用于创建小型部署的备份。要实现弹性、无中断的备份,请使用文件系统快照或块级磁盘快照以及 MongoDB Atlas 的云备份

注意

使用 MongoDB Atlas 备份分片集群

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

分片集群还可以使用以下协调备份和恢复流程之一,以确保跨分片事务的原子性:

由于 mongodumpmongorestore 会与运行的mongod实例交互,因此可能会影响数据库性能。这些工具会创建流量并强制数据库通过内存读取所有数据。当MongoDB读取不常访问的数据时,它会逐出经常访问的数据,从而降低数据库常规工作负载的性能。

使用MongoDB工具备份数据时,请遵循以下准则:

  • 为文件添加标签以标识备份内容和备份时间。

  • 如果 mongodumpmongorestore 的性能影响不可接受,请使用替代方案,例如 文件系统快照MongoDB Atlas中的云备份。

  • 为确保 mongodump 能对副本集进行一致备份,必须使用 --oplog 选项捕获备份操作过程中接收到的写入,或者在备份期间停止对副本集的所有写入。

    对于分片集群副本集,请参阅使用数据库转储备份自管理分片集群

  • 通过将备份恢复到测试部署来验证备份。

  • 要减少分片集群中备份不一致的情况,请在备份期间停止负载均衡器、所有写入操作和任何模式转换。

提示

有关详细信息,请参阅自管理部署的备份方法。有关MongoDB Database Tools参考,请参阅:

mongorestoremongodump 可以将数据输出到存档文件,这是多个BSON文件的单文件替代方案。存档文件是支持非连续文件写入的特殊用途格式。它们启用从MongoDB进行并发备份并恢复到MongoDB。存档文件还可以在备份和恢复期间优化磁盘 I/O。

您还可以将存档文件写入标准输出 (stdout)。写入到标准输出可以实现通过网络进行数据迁移,减少磁盘 I/O,并提高MongoDB工具和存储引擎的并发性。

有关存档文件的更多信息,请参阅 --archive 选项。

备份提供数据库当前状态的快照。从备份中恢复时,恢复的数据库不包括备份后所做的任何更改,这可能会导致数据丢失。

mongodump 实用程序通过连接到运行的mongod 来备份数据。它可以备份整个服务器、数据库或集合,也可以使用查询来备份部分集合。mongodump 会从其输出中排除 local数据库的内容。

不带任何参数,mongodump 会通过端口 27017 连接到本地系统上的MongoDB实例,并在当前目录中创建名为 dump/ 的数据库备份:

mongodump

要指定托管和端口,请使用以下方法之一:

  • 使用 SRV标准 连接字符串指定 --uri 字符串:

    mongodump --uri="mongodb+srv://username:password@cluster0.example.mongodb.net" <additional_options>
  • --host 中指定主机名和端口:

    mongodump --host="mongodb0.example.com:27017" <additional_options>
  • 分别指定 --host--port

    mongodump --host="mongodb0.example.com" --port=27017 <additional_options>

要指定不同的输出目录,请使用 --out(或 -o):

mongodump --out=/opt/backup/mongodump-1

要将转储限制为特定数据库或集合,请使用 --db--collection

mongodump --collection=myCollection --db=test

这会在当前目录的 dump/ 子目录中从 test数据库创建 myCollection 转储。

mongodump 覆盖输出文件夹中的现有文件(默认:dump/)。在多次运行之前,请备份或重命名输出文件夹。

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

backup 角色为运行数据库分析时存在的 system.profile 集合提供了额外的备份特权。

使用 --host--port 连接到远程实例:

mongodump \
--host=mongodb1.example.net \
--port=3017 \
--username=user \
--password="pass" \
--out=/opt/backup/mongodump-1

在任何 mongodump 命令上指定用户名和密码以进行身份验证。

--oplog 选项会在备份期间收集oplog条目,以便您可以将数据库恢复到备份完成时的状态。

使用 --oplogmongodump 复制源数据库中的所有数据以及从备份开始到结束的所有oplog条目。将其与 mongorestore --oplogReplay 结合使用恢复反映 mongodump 完成确切时刻的备份。

mongorestore 实用程序通过直接连接到运行的mongod 来恢复由 mongodump 创建的二进制备份。默认下,mongorestore 会在 dump/目录中查找数据库备份,并可恢复整个备份或部分备份。

注意

所有 MongoDB 集合默认都有 UUID。MongoDB 恢复集合时,恢复的集合保留其原始 UUID。恢复不存在 UUID 的集合时,MongoDB 会为恢复的集合生成一个 UUID。

有关集合 UUID 的更多信息,请参阅集合。

要将 mongorestore 连接到活动的 mongod

mongorestore --uri <connection string> <path to the backup>

示例,要从目录恢复:

mongorestore /opt/backup/mongodump-1

这会将备份恢复到 localhost:27017 上的 mongod实例。

要将数据恢复到启用了访问权限控制的部署,如果数据不包括 system.profile集合数据,并且您在没有 restore选项的情况下运行 ,mongorestore --oplogReplay角色将提供必要的特权。

如果备份数据包含 system.profile 集合数据或者使用 --oplogReplay,则需要额外权限。

system.profile

如果备份数据包括system.profile集合数据,而目标数据库不包含system.profile集合,则mongorestore会尝试创建集合,即使程序实际上并不恢复system.profile文档。用户需要额外的特权才能对数据库的 集合执行createCollectionconvertToCapped system.profile和 操作。

内置角色 dbAdmindbAdminAnyDatabase 均可提供其他特权。

--oplogReplay

要使用 --oplogReplay 运行,请创建一个在 anyResource 上具有 anyAction用户定义的角色

仅授予必须使用 --oplogReplay 运行 mongorestore 的用户。

默认下,mongorestore 连接到 localhost:27017。要恢复到不同的托管或端口,请使用 --host--port

mongorestore --host=mongodb1.example.net --port=3017

要进行身份验证,请加入 --username--authenticationDatabase。省略 --password 以让 mongorestore 提示输入密码:

mongorestore \
--host=mongodb1.example.net \
--port=3017 \
--username=user \
--authenticationDatabase=admin \
/opt/backup/mongodump-1

要捕获 mongodump运行时发生的写入,请使用 --oplogmongodump 会为运行期间的每次写入创建一个 oplog.bson文件,其中包含oplog条目。恢复时使用 --oplogReplay 应用这些操作。

有关示例,请参阅 mongodump 示例mongorestore 示例

mongorestore --oplogReplayoplog.bson 开始恢复所有数据,但不支持恢复到任意时间点。使用它可确保恢复的数据反映 mongodump --oplog运行期间发生的任何写入。

注意

--oplog 旨在与副本集一起使用。对于分片集群,包括作为分片环境一部分的副本集,请参阅使用数据库转储备份自管理分片集群。

在插入期间使用 --objcheck 验证文档完整性,或在恢复之前使用 --drop 删除每个集合。

后退

使用文件系统快照进行备份和恢复

在此页面上