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