MongoDB 副本集不是备份,这件事越早分清越好
· 阅读需 2 分钟
MongoDB 副本集这套能力刚接触时,很容易给人一种“数据已经更安全了”的感觉。这个判断不算错,但如果进一步把它理解成“那就等于已经做好备份了”,问题就会变得很严重。2014 年我在看一些 MongoDB 部署经验时,越来越觉得这两个概念必须尽早分开。
副本集解决的是什么
副本集最核心解决的是可用性和冗余。
主节点挂了,从节点可以接替;某台机器出问题,数据还有别的副本能继续承接。这对线上服务来说当然很重要。
但它保护的是“节点故障”这类场景,不天然保护“错误数据也被同步扩散”这类问题。
为什么它不等于备份
因为只要主节点上发生了错误写入、误删或者坏数据进入集合,这些变化完全有可能顺着复制链路一起传播。
换句话说,副本集让错误更不容易因为单机故障丢失,但也不妨碍错误本身被复制得很完整。
这就是它和备份最大的区别。
备份真正解决的是什么
备份的价值是让你在“当前数据状态已经不可信”的时候,还能回到之前某个相对可信的时间点。
它面对的不是可用性,而是恢复能力。
这两者经常一起被提,但关注点完全不同:
- 副本集关心的是服务别轻易挂
- 备份关心的是挂了或者写坏了之后能不能退回来
小结
MongoDB 副本集当然重要,但它不是备份的替代品。
2014 年这种数据库方案开始被更多团队采用时,最值得早点分清的一件事,就是“高可用”和“可恢复”根本不是一个词。把它们混在一起理解,往往要等出事以后才发现代价有多大。
