Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

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

在此页面上

  • Considerations
  • 部署
  • 性能影响
  • 输出格式
  • 步骤
  • 备份数据库 mongodump
  • 恢复数据库 mongorestore

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

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

对于完全托管的备份方法,请使用 MongoDB Atlas 中的 Cloud Backups(云备份),后者使用集群云服务提供商的本机快照功能来提供本地化的备份存储。

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

注意

使用 MongoDB Atlas 备份分片集群

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

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

由于 mongodumpmongorestore 会通过与正在运行的 mongod 实例交互来进行操作,因此它们可能会影响正在运行的数据库的性能。这些工具不仅会为正在运行的数据库实例生成流量,还会强制该数据库通过内存读取所有数据。当 MongoDB 读取不常使用的数据时,它可能会逐出更频繁访问的数据,从而导致数据库常规工作负载的性能下降。

使用 MongoDB 的工具备份数据时,请参考以下指南:

  • 为文件添加标签,以便您能够识别备份的内容以及备份对应的时间点。

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

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

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

  • 试着将备份恢复到一个 MongoDB 的测试部署中来确保您的备份可用。

  • 为了帮助减少分片群集备份中出现不一致的可能性,您必须停止负载均衡器,停止所有写入操作,并在备份期间停止任何模式转换。

提示

另请参阅:

有关备份 MongoDB 实例的更多信息,请参阅自管理部署的备份方法MongoDB Atlas 云备份。此外,请参阅以下有关 MongoDB Database Tools 的参考文档:

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

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

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

注意

使用 MongoDB Atlas 备份分片集群

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

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

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

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

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

mongodump 实用程序通过连接正在运行的 mongod 来备份数据。

该工具可以为整个服务器、数据库或集合创建备份,也可以结合查询来仅备份一个集合的某一部分。

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

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

mongodump

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

  • 使用 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>

mongodump 将写入 BSON 文件,该文件包含通过在 mongodb.example.net 主机端口 27017 上侦听的 mongod 可访问的数据副本。请参阅从非本地 mongod 实例创建备份,了解更多信息。

要指定其他输出目录,可使用 --out or -o 选项:

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

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

mongodump --collection=myCollection --db=test

此操作会在当前工作目录的 dump/ 子目录中的数据库 test 内创建名为 myCollection 的集合转储。

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

带有 mongodump--oplog 选项可收集 oplog 条目并允许您在实时数据库上执行备份。如果您稍后从备份恢复数据库,数据库将与备份完成时的数据库相同。

借助 --oplogmongodump 拷贝源数据库中的所有数据以及从备份过程开始到结束的所有 oplog 条目。将此操作与 mongorestore --oplogReplay 结合可恢复备份,该备份可反映与 mongodump 完成创建转储文件时对应的特定时刻。

mongodump--host--port 选项,允许您连接到远程主机并从远程主机进行备份。考虑以下示例:

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

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

注意

使用 MongoDB Atlas 备份分片集群

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

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

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

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

system.profile

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

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

--oplogReplay

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

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

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

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

mongorestore 可以恢复整个数据库备份或部分的备份。

注意

所有 MongoDB 集合默认都有 UUID。MongoDB 恢复集合时,恢复的集合保留其原始 UUID。恢复不存在 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.bson 文件,其中包含 oplog 条目。您可以使用 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

后退

使用Atlas 备份快照