文档菜单
文档首页
/
MongoDB 手册
/ / /

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

本页内容

  • 考虑事项
  • 部署
  • 性能影响
  • 输出格式
  • 程序
  • 使用mongodump
  • 使用 mongorestore 恢复数据库

本教程描述了使用命令行实用程序创建备份和恢复数据的过程mongorestoremongodump 是 MongoDB 提供的工具。

要恢复您的自托管部署的备份到托管的 MongoDB Atlas 部署,请参阅 使用 mongorestore 进行初始化。

对于全托管备份方法,请使用 MongoDB Atlas 中的 云备份,它使用集群云服务提供商的本地快照功能进行备份存储。

mongorestoremongodump 工具与BSON 数据转储,对于创建小型部署的备份很有用。为了实现弹性且不中断的备份,请使用 文件系统快照 或与 MongoDB Atlas 的 云备份 一起进行块级磁盘快照。

注意

使用 MongoDB Atlas 备份分片集群

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

分片集群还可以使用以下协调的备份和恢复过程之一,这些过程保持跨分片的事务原子性保证

由于 mongodumpmongorestore 通过与正在运行的 mongod 实例交互来操作,因此可能会影响您运行数据库的性能。这些工具不仅为运行中的数据库实例创建流量,而且迫使数据库通过内存读取所有数据。当 MongoDB 读取不经常使用的数据时,它可能会驱逐更多频繁访问的数据,从而降低数据库常规工作负载的性能。

在用 MongoDB 的工具备份您的数据时,请考虑以下指南

  • 为文件标记标签,以便您可以识别备份的内容以及备份反映的时间点。

  • 如果 mongodumpmongorestore 对您用例的性能影响不可接受,请使用其他备份策略,例如 文件系统快照 或 MongoDB Atlas 中的 云备份

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

    有关分片集群副本集的信息,请参阅 使用数据库转储备份自管理的分片集群。

  • 请确保您的备份可用,方法是将它们恢复到测试 MongoDB 部署中。

  • 为了帮助降低分片集群备份中不一致性的可能性,您必须在整个备份期间停止均衡器、停止所有写入操作以及停止任何模式转换。

提示

另请参阅

自管理部署的备份方法MongoDB Atlas 云备份 以获取有关备份 MongoDB 实例的更多信息。此外,请考虑以下 MongoDB 数据库工具的参考文档

mongorestoremongodump 可以将数据输出到存档文件,这是多个 BSON 文件的单一文件替代品。存档文件是特殊用途的格式,支持非连续文件写入。它们使 MongoDB 可以同时进行备份和恢复。使用存档文件可以在备份和恢复操作执行时优化磁盘 I/O。

您还可以将存档文件输出到标准输出(stdout)。写入标准输出允许通过网络迁移数据、减少磁盘 I/O 脚印以及在 MongoDB 工具和您的存储引擎中提高并发性。

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

注意

使用 MongoDB Atlas 备份分片集群

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

分片集群还可以使用以下协调的备份和恢复过程之一,这些过程保持跨分片的事务原子性保证

mongodump 在其输出中排除了 local 数据库的内容。

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

backup角色还提供了备份在system.profile集合的额外权限,该集合是在使用数据库分析时运行的。

mongodump实用程序通过连接到运行中的mongod.

该实用程序可以创建整个服务器、数据库或集合的备份,或者可以使用查询仅备份集合的一部分。

当您在没有任何参数的情况下运行mongodump时,该命令将连接到本地系统(例如 localhost)上的MongoDB实例(端口 27017),并在当前目录中创建名为 dump/ 的数据库备份。

要从运行在同一台机器上默认端口 27017mongod实例备份数据,请使用以下命令

mongodump

要指定MongoDB实例的主机和端口,您可以

  • --uri字符串中指定主机名和端口,使用SRV标准连接字符串

    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>

mongodump 将写入 BSON 文件,这些文件包含通过监听 mongodb.example.net 主机端口 27017mongod 访问的数据副本。有关更多信息,请参阅 从非本地 mongod 实例创建备份

要指定不同的输出目录,可以使用 --out 或 -o 选项

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

要限制数据库转储中包含的数据量,可以在 mongodump 中指定 --db--collection 作为选项。例如

mongodump --collection=myCollection --db=test

此操作将在当前工作目录的 dump/ 子目录中创建名为 myCollection 的集合的转储,来自数据库 test

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

使用 --oplog 选项与 mongodump 一起收集 oplog 条目,并允许您对实时数据库执行备份。如果您稍后从备份中恢复数据库,则数据库将与备份过程完成时的状态相同。

使用--oplogmongodump命令会复制源数据库中的所有数据以及从备份开始到结束的所有操作日志(oplog)条目。此操作与mongorestore --oplogReplay结合使用,可让您恢复一个反映mongodump完成创建备份文件那一刻特定时间的备份。

--host--port选项允许您连接到并从远程主机备份mongodump。以下是一个示例

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

在任何mongodump命令中,您都可以像上面一样指定用户名和密码凭据以指定数据库身份验证。

注意

使用 MongoDB Atlas 备份分片集群

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

分片集群还可以使用以下协调的备份和恢复过程之一,这些过程保持跨分片的事务原子性保证

要将数据恢复到已启用访问控制的MongoDB部署,restore角色提供从备份恢复数据的必要权限,前提是数据不包含system.profile集合数据,并且您在不使用--oplogReplay选项的情况下运行mongorestore

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

system.profile

如果备份数据包含system.profile集合数据,而目标数据库不包含system.profile集合,mongorestore会尝试创建该集合,尽管程序实际上并没有恢复system.profile文档。因此,用户需要在数据库的system.profile集合上执行createCollectionconvertToCapped操作,需要额外的权限。

内置角色dbAdmindbAdminAnyDatabase提供了额外的权限。

--oplogReplay

要使用--oplogReplay运行,创建一个具有用户定义角色anyAction权限,并针对anyResource

仅授予必须使用mongorestore带有--oplogReplay的权限的用户。

mongorestore实用程序可以恢复由mongodump创建的二进制备份。默认情况下,mongorestore会在dump/目录中查找数据库备份。

mongorestore实用程序通过直接连接到正在运行的mongod来恢复数据。

mongorestore 可以恢复整个数据库备份或备份的子集。

注意

所有 MongoDB 集合都默认具有UUIDs。当 MongoDB 恢复集合时,恢复的集合保留其原始 UUIDs。当恢复一个没有 UUID 的集合时,MongoDB 为恢复的集合生成一个 UUID。

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

要使用 mongorestore 连接到活动 mongod,请使用以下原型形式的命令

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

考虑以下示例

mongorestore /opt/backup/mongodump-1

在这里,mongorestore/opt/backup/mongodump-1 目录中的数据库备份导入到运行在本地主机接口默认端口 27017 上的 mongod 实例。

要捕获 mongodump 运行期间可能发生的写入,请使用 mongodump --oplogmongodump 为运行期间发生的每个写入创建一个包含 oplog 条目的 oplog.bson 文件。您可以使用 mongorestore --oplogReplay 应用 oplog 操作。

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

将恢复 oplog.bson 文件中的所有数据。

mongorestore --oplogReplay 不允许您将数据恢复到任意时间点。使用 mongorestore --oplogReplay 确保恢复的数据与 mongodump --oplog 运行期间发生的任何写入保持最新。

注意

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

您还可以考虑使用 mongorestore --objcheck 选项来检查在将对象插入数据库时的完整性,或者您可以考虑使用 mongorestore --drop 选项在从备份中恢复之前删除数据库中的每个集合。

默认情况下,mongorestore 连接到运行在本地接口和默认端口(27017)上的 MongoDB 实例。如果您想恢复到不同的主机或端口,请使用 --host--port 选项。

以下示例指定了 --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

返回

使用快照