使用 MongoDB 工具备份和还原

在本页面

本教程介绍了使用 MongoDB 随附的 Util 创建备份和还原数据的过程。 mongodumpmongorestoreUtil 可用于BSON数据转储,对于创建小型部署的备份非常有用。对于 Elastic 和无中断的备份,请使用文件系统或块级磁盘快照功能,例如MongoDB 备份方法文档中描述的方法。

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

使用 MongoDB 的工具备份数据时,请考虑以下准则:

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

  • 如果mongodumpmongorestore的性能影响对于您的用例不可接受,请使用备用备份策略,例如Filesystem SnapshotsMongoDB 云 Management 器

  • 使用--oplog捕获mongodump操作期间的传入写操作,以确保备份反映一致的数据状态。

  • 通过将备份还原到测试 MongoDB 部署,确保备份可用。

See also

MongoDB 备份方法MongoDB Cloud Manager 备份文档有关备份 MongoDB 实例的更多信息。此外,请考虑以下有关 MongoDB 导入/导出工具的参考文档:

BSON 二进制转储

mongorestoremongodumpUtil 可用于BSON数据转储,对于创建小型部署的备份非常有用。对于 Elastic 和无中断的备份,请使用文件系统或块级磁盘快照功能,例如MongoDB 备份方法文档中描述的方法。

如果其他备份方法(例如MongoDB 云 Management 器文件系统快照)不可用,请使用这些工具进行备份。

Procedures

使用 mongodump 备份数据库

排除本地数据库

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

Required Access

要针对已启用access control的 MongoDB 部署运行mongodump,您必须具有为每个要备份的数据库授予find操作的特权。内置的backup角色提供了执行所有数据库备份所需的特权。

在版本 3.2.1 中进行了更改:backup角色提供了额外的特权来备份使用database profiling运行时存在的system.profile集合。以前,用户需要对此集合具有额外的read访问权限。

mongodump 基本操作

mongodumpUtil 通过连接到正在运行的mongodmongos实例来备份数据。

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

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

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

mongodump

mongodump从 2.2 或更高版本开始使用的数据格式与mongod的早期版本“不兼容”。不要使用mongodump的最新版本来备份较旧的数据存储。

您还可以指定mongodump应该连接到的 MongoDB 实例的--host--port。例如:

mongodump --host mongodb.example.net --port 27017

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

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

mongodump --out /data/backup/

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

mongodump --collection myCollection --db test

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

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

使用 Oplog 进行时间点操作

--oplog选项与mongodump一起使用以收集oplog条目,以构建副本集中的数据库的时间点快照。使用--oplogmongodump从备份过程的开始到结束复制源数据库中的所有数据以及所有oplog条目。结合mongorestore --oplogReplay,此操作使您可以还原备份,该备份反映了与mongodump完成创建转储文件的时间相对应的特定时间。

从 nonlocalmongod 实例创建备份

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

mongodump --host mongodb1.example.net --port 3017 --username user --password "pass" --out /opt/backup/mongodump-2013-10-24

如上所述,您可以在任何mongodump命令上指定用户名和密码凭据,以指定数据库身份验证。

使用 mongorestore 还原数据库

Access Control

要将数据还原到已启用access control的 MongoDB 部署中,restore角色提供了从备份还原数据的必要特权如果数据不包含system.profile集合数据,并且您在不使用--oplogReplay选项的情况下运行mongorestore

如果备份数据包含system.profile收集数据,或者您使用--oplogReplay运行,则需要其他特权:

system.profile如果备份数据包含system.profile集合数据,并且目标数据库不包含system.profile集合,则mongorestore会尝试创建该集合,即使该程序实际上并未还原system.profile文档。因此,用户需要其他特权才能对数据库的system.profile集合执行createCollectionconvertToCapped操作。


内置角色dbAdmindbAdminAnyDatabase均提供其他特权。
| --oplogReplay |要与--oplogReplay一起运行,请创建在anyResource上具有anyActionuser-defined role
仅向必须使用--oplogReplay运行mongorestore的用户授予权限。

mongorestore 基本操作

mongorestoreUtil 还原由mongodump创建的二进制备份。缺省情况下,mongorestoredump/目录中寻找数据库备份。

mongorestoreUtil 通过直接连接到正在运行的mongodmongos恢复数据。

mongorestore可以还原整个数据库备份或备份的子集。

Note

  • 3.6 版的新功能:*

默认情况下,所有 MongoDB 集合都具有 UUID。当 MongoDB 还原集合时,还原的集合将保留其原始 UUID。还原不存在 UUID 的集合时,MongoDB 会为还原的集合生成一个 UUID。

有关集合 UUID 的更多信息,请参见Collections

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

mongorestore --port <port number> <path to the backup>

考虑以下示例:

mongorestore dump-2013-10-25/

在这里,mongorestoredump-2013-10-25目录中的数据库备份导入到在默认端口27017的 localhost 接口上运行的mongod实例。

恢复时间点 Oplog 备份

如果使用--oplog选项创建数据库转储以确保时间点快照,请使用--oplogReplay选项调用mongorestore,如以下示例所示:

mongorestore --oplogReplay

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

将备份还原到 nonlocalmongod 实例

默认情况下,mongorestore连接到在 localhost 接口(例如127.0.0.1)和默认端口(27017)上运行的 MongoDB 实例。如果要还原到其他主机或端口,请使用--host--port选项。

考虑以下示例:

mongorestore --host mongodb1.example.net --port 3017 --username user --password 'pass' /opt/backup/mongodump-2013-10-24

如上所述,如果您的mongod需要身份验证,则可以指定用户名和密码连接。