我想以一种能够确保备份开始时数据库一致性的方式备份 MongoDB 副本集。如文档所述,--oplog
标记为mongodump
还将在备份过程中复制 oplog。但是,这确保了备份过程结束时时间点的完整性,这可能在过程开始后数十分钟。
我一直在想一些办法:
- 在给定时间关闭其中一个节点并直接从数据文件进行离线备份。
- 获取某个节点的全局写锁(这可能吗?),然后针对该备份节点启动备份过程。
还有其他方法可以确保我从某个特定的定义时间获得准确的(约 5 秒窗口)转储吗?
答案1
有几种方法可以完成“起始”时间点备份。请注意,以下内容适用于备份副本集。分片集群的备份更加复杂。
1)关闭mongod
关闭 mongod 进程并复制文件或对文件集执行 mongodump。
2)锁定/刷新数据
Adb.fsyncLock()mongo shell 调用或执行相关的 fsyncLock 命令将阻止写入并允许您复制数据/文件集。此命令将阻止写入并刷新数据文件。
3)时间点文件系统快照
如果您拥有一种允许对数据和日志文件进行时间点快照的机制,则可以使用该机制获取时间点副本。在 Linux 上,实现此目的的一种好方法是通过 LVM,其中数据和日志文件位于单个卷组中。
4)彩信备份
MongoDB Inc 提供备份服务,可实现时间点恢复。有两种选择,云备份服务或托管备份。两者都是付费服务,第一种按使用量计费,第二种向 MongoDB 订阅者收费。