首页 / MongoDB 入门教程 / 副本集、分片与备份恢复

MongoDB 入门教程

副本集、分片与备份恢复

本教程共 50 篇 · 第 50 篇 · 更新于 2026-07-30 · 约 4 分钟阅读

MongoDBMongoDB 入门教程副本集分片mongodump备份恢复

50. 副本集、分片与备份恢复

本节目标:理解副本集与分片分别解决什么问题,并会用 mongodump/mongorestore 做备份和恢复。

前面章节都在单机视角下讲操作。生产环境还得考虑两件事:挂了怎么办(高可用)、数据太多怎么办(扩容)。这一章给概念全貌和备份命令。

50.1 副本集:多副本保高可用

副本集(Replica Set)是一组维护相同数据的 mongod 实例。它解决「单机挂了服务就断」的问题。

  • 一个 主节点(Primary) 负责所有写操作。
  • 多个 从节点(Secondary) 复制主节点的数据。
  • 主节点挂了,从节点会自动选举出新的主,业务几乎无感。这就是自动故障转移(Failover)。

数据同步靠 oplog(操作日志):主节点记下每个写操作,从节点追上重放。

// 进 mongosh 看副本集状态
test> rs.status()
Note

副本集不仅为高可用,也支撑了第 48 章的变更流和第 49 章的事务。这两大功能都依赖 oplog,所以都得有副本集。

50.2 分片:把数据拆到多机

分片(Sharding)把数据按某个键切分,分布到多台机器上,解决「单机装不下、扛不住」的问题。它是水平扩展(Horizontal Scaling)的手段。

一个分片集群由三部分组成:

  • Shard(分片):每台存一部分数据,自身也是副本集。
  • Mongos(路由):查询路由器,客户端只连它,由它把请求发到对应分片。
  • Config Server(配置服务器):存集群的元数据和路由信息。
# 客户端连的是 mongos,而不是某个分片
mongosh "mongodb://mongos-host:27017"

分片键(Shard Key)决定数据怎么切。选不好会造成数据倾斜、热点。MongoDB 8.3 起,对分片集群的 DDL 操作都要走 mongos 执行。

Note

据 MongoDB 8.3 官方兼容说明,分片集群上的 DDL 与 applyOps 操作必须经由 mongos 执行,不能再直连分片节点。这是 8.3 的硬性变化,搭建集群时务必留意。

Warning

分片是重操作,架构复杂、运维成本高。数据量没到瓶颈前别轻易分片,先用副本集扛着。

50.3 副本集 vs 分片:各管一摊

维度副本集分片
主要目标高可用、容灾水平扩展、突破单机容量
数据分布每份数据全量复制数据被切分存到不同分片
写能力受单机限制可随分片数线性扩展
复杂度
Tip

简单记:怕挂用副本集,怕满用分片。很多生产环境是「副本集 + 分片」组合,既高可用又易扩展。

50.4 备份:mongodump 导出

mongodump 把数据库导出成 BSON 文件,是最常用的逻辑备份工具。

# 备份整个实例到 ./dump 目录
mongodump --uri="mongodb://127.0.0.1:27017"

# 只备份某个库或某个集合
mongodump --uri="mongodb://127.0.0.1:27017" --db=test --collection=users

导出结果是 BSON,体积小、保类型,适合做定时备份。

Note

副本集环境下建议在从节点上跑 mongodump,避免占用主节点资源、影响线上读写。

50.5 恢复:mongorestore 导入

mongorestoremongodump 产出的文件还原回去。

# 从 dump 目录整体恢复
mongorestore --uri="mongodb://127.0.0.1:27017" ./dump

# 恢复时先清空目标集合,避免重复
mongorestore --uri="mongodb://127.0.0.1:27017" --drop ./dump
Warning

恢复会覆盖同名数据。--drop 会先删后导,生产执行前务必确认备份文件正确、目标无误。

50.6 小结

副本集用多副本和自动选举保高可用,分片用切分数据做水平扩展,两者常结合使用。备份用 mongodump 导出,恢复用 mongorestore 导入。概念清楚后,再按需深入集群搭建与调优。

上一篇
多文档事务
下一篇
已经是最后一篇啦