在生产环境中部署MongoDB时,您应该制定一种策略,以在发生数据丢失事件时捕获和还原备份。
MongoDB官方云服务MongoDB Atlas提供了2种完全托管的备份方法:
MongoDB Cloud Manager是针对MongoDB的托管备份,监视和自动化服务。MongoDB Cloud Manager支持从图形用户界面备份和还原MongoDB 副本集和分片群集。
在MongoDB的云管理器支持备份和MongoDB部署的恢复。
MongoDB Cloud Manager 通过从MongoDB部署中读取操作 日志数据,持续备份MongoDB 副本集 和分片群集。MongoDB Cloud Manager会按设置的时间间隔创建数据快照,还可以提供MongoDB副本集和分片群集的时间点恢复。
小费
使用其他MongoDB备份方法很难实现分片群集快照。
要开始使用MongoDB Cloud Manager备份,请注册MongoDB Cloud Manager。有关MongoDB Cloud Manager的文档,请参阅MongoDB Cloud Manager文档。
借助Ops Manager,MongoDB订户可以安装和运行在其自己的基础架构上为MongoDB Cloud Manager供电的相同核心软件。Ops Manager是一种本地解决方案,其功能与MongoDB Cloud Manager类似,并且可与Enterprise Advanced订阅一起使用。
有关Ops Manager的更多信息,请参阅MongoDB Enterprise Advanced页面和Ops Manager手册。
使用AES256-GCM的加密存储引擎的注意事项
对于使用加密模式的加密存储引擎AES256-GCM
,AES256-GCM
要求每个进程都使用唯一的计数器块值和密钥。
对于
配置了密码的加密存储引擎AES256-GCM
:
从4.2开始,如果您从通过“热”备份(即mongod
正在运行)获取的文件中还原,则MongoDB可以在启动时检测到“脏”密钥并自动翻转数据库密钥以避免IV(初始化向量)重用。
但是,如果您从通过“冷”备份获取的文件中恢复(即mongod
未运行),则MongoDB无法在启动时检测到“脏”密钥,并且IV的重用会使机密性和完整性保证无效。
从4.2开始,为避免从冷文件系统快照还原后重新使用密钥,MongoDB添加了一个新的命令行选项--eseDatabaseKeyRollover
。使用该--eseDatabaseKeyRollover
选项启动后
,mongod
实例将滚动使用AES256-GCM
密码配置的数据库密钥
并退出。
小费
AES256-GCM
加密模式,请不要复制数据文件或从文件系统快照(“热”或“冷”)还原。您可以通过复制MongoDB的基础数据文件来创建MongoDB部署的备份。
如果MongoDB存储数据文件的卷支持时间点快照,则可以使用这些快照在确切的时间创建MongoDB系统的备份。文件系统快照是操作系统卷管理器功能,并非特定于MongoDB。借助文件系统快照,操作系统可以获取卷的快照以用作数据备份的基准。快照的机制取决于基础存储系统。例如,在Linux上,逻辑卷管理器(LVM)可以创建快照。同样,Amazon的EC2 EBS存储系统支持快照。
要获取正在运行的mongod
进程的正确快照,您必须启用日记功能,并且日记必须与其他MongoDB数据文件位于同一逻辑卷上。如果未启用日记功能,则无法保证快照将保持一致或有效。
要获得分片群集的一致快照,必须禁用平衡器并在大约同一时间从每个分片以及配置服务器捕获快照。
欲了解更多信息,请参阅 备份和文件系统与快照恢复和 备份分片的群集文件系统快照使用LVM创建快照的完整说明。
mongodump
¶mongodump
从MongoDB数据库读取数据并创建高保真BSON文件,该mongorestore
工具可用于填充MongoDB数据库。
mongodump
并且mongorestore
是用于备份和还原小型MongoDB部署的简单高效的工具,但是对于捕获大型系统的备份而言并不是理想的选择。
mongodump
并mongorestore
针对正在运行的mongod
进程进行操作,并且可以直接操作基础数据文件。默认情况下,mongodump
不捕获本地数据库的内容。
mongodump
仅捕获数据库中的文档。所生成的备份是节省空间,但mongorestore
还是
mongod
恢复数据后,必须重建索引。
连接到MongoDB实例时,mongodump
可能会对mongod
性能产生不利影响。如果您的数据大于系统内存,则查询会将工作集推出内存,从而导致页面错误。
应用程序可以在mongodump
捕获输出的同时继续修改数据。对于副本集,mongodump
提供了在
操作期间发生的--oplog
输出oplog条目中包含选项的选项mongodump
。这允许相应的mongorestore
操作重播捕获的操作日志。要恢复使用创建的备份--oplog
,请mongorestore
与--oplogReplay
选项一起使用。
但是,对于副本集,请考虑使用MongoDB Cloud Manager或 Ops Manager。
注意
mongodump
并且不能作为正在进行分片事务的4.2+分片群集的备份策略的一部分,因为使用创建的备份
不能保持分片事务的原子性保证。mongorestore
mongodump
对于具有正在进行中的分片事务的4.2+分片群集,请使用以下协调的备份和还原过程之一,该过程 确实维护了跨分片事务的原子性保证:
有关 更多信息,请参阅使用MongoDB工具备份和还原 以及使用数据库转储备份分片群集。