使用 MongoDB 工具备份和还原
在本页面
本教程介绍了使用 MongoDB 随附的 Util 创建备份和还原数据的过程。 mongodump和mongorestoreUtil 可用于BSON数据转储,对于创建小型部署的备份非常有用。对于 Elastic 和无中断的备份,请使用文件系统或块级磁盘快照功能,例如MongoDB 备份方法文档中描述的方法。
因为mongodump和mongorestore是通过与正在运行的mongod实例进行交互来操作的,所以它们会影响正在运行的数据库的性能。这些工具不仅会为运行中的数据库实例创建流量,还会迫使数据库通过内存读取所有数据。当 MongoDB 读取不常使用的数据时,它将驱逐出更频繁访问的数据,从而导致数据库常规工作负载的性能下降。
使用 MongoDB 的工具备份数据时,请考虑以下准则:
-
标记文件,以便您可以识别备份的内容以及备份反映的时间点。
-
如果mongodump和mongorestore的性能影响对于您的用例不可接受,请使用备用备份策略,例如Filesystem Snapshots或MongoDB 云 Management 器。
-
通过将备份还原到测试 MongoDB 部署,确保备份可用。
See also
MongoDB 备份方法和MongoDB Cloud Manager 备份文档有关备份 MongoDB 实例的更多信息。此外,请考虑以下有关 MongoDB 导入/导出工具的参考文档:
BSON 二进制转储
mongorestore和mongodumpUtil 可用于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 通过连接到正在运行的mongod或mongos实例来备份数据。
该 Util 可以为整个服务器,数据库或集合创建备份,或者可以使用查询仅备份集合的一部分。
当您不带任何参数运行mongodump时,该命令将通过端口27017
连接到本地系统上的 MongoDB 实例(例如127.0.0.1
或localhost
),并在当前目录中创建名为dump/
的数据库备份。
要从同一计算机上的默认端口27017
上运行的mongod或mongos实例备份数据,请使用以下命令:
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条目,以构建副本集中的数据库的时间点快照。使用--oplog,mongodump从备份过程的开始到结束复制源数据库中的所有数据以及所有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集合执行createCollection和convertToCapped操作。 |
内置角色dbAdmin和dbAdminAnyDatabase均提供其他特权。
| --oplogReplay
|要与--oplogReplay一起运行,请创建在anyResource上具有anyAction的user-defined role。
仅向必须使用--oplogReplay运行mongorestore的用户授予权限。
mongorestore 基本操作
mongorestoreUtil 还原由mongodump创建的二进制备份。缺省情况下,mongorestore在dump/
目录中寻找数据库备份。
mongorestoreUtil 通过直接连接到正在运行的mongod或mongos恢复数据。
mongorestore可以还原整个数据库备份或备份的子集。
Note
- 3.6 版的新功能:*
默认情况下,所有 MongoDB 集合都具有 UUID。当 MongoDB 还原集合时,还原的集合将保留其原始 UUID。还原不存在 UUID 的集合时,MongoDB 会为还原的集合生成一个 UUID。
有关集合 UUID 的更多信息,请参见Collections。
要使用mongorestore连接到活动的mongod或mongos,请使用具有以下原型形式的命令:
mongorestore --port <port number> <path to the backup>
考虑以下示例:
mongorestore dump-2013-10-25/
在这里,mongorestore将dump-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需要身份验证,则可以指定用户名和密码连接。