在 MongoDB 中,local
是一个内置的系统数据库,用于存储当前 MongoDB 实例(或副本集节点)的元数据和内部数据,与其他数据库不同,local
数据库的数据不会被复制到副本集的其他成员。
local
数据库的核心作用
用途 | 说明 |
---|---|
副本集内部状态 | 存储副本集成员的元数据(如心跳、选举状态等)。 |
操作日志 (oplog) | 包含副本集节点的 oplog.rs 集合,记录所有写操作,用于数据同步(仅在副本集的主节点有效)。 |
本地临时数据 | 存放无需复制的临时数据,如连接会话、诊断日志等。 |
local
数据库中的关键集合
集合名 | 内容 |
---|---|
oplog.rs |
操作日志(仅副本集有效),记录所有写操作的历史,用于副本集同步。 |
startup_log |
MongoDB 实例启动时的初始化日志。 |
replset.election |
副本集选举相关的元数据(如节点投票状态)。 |
system.replset |
副本集配置信息。 |
system.views |
数据库视图的元数据(从 MongoDB 3.4+ 开始,视图元数据不再存在于此)。 |
为什么 local
数据库的数据不会复制?
- 副本集场景:每个节点的
local
数据库存储的数据是节点独有的(如本地的oplog.rs
),其他节点无需同步。 - 分片集群场景:分片节点的
local
数据库存储该分片的内部信息,不会被传播到其他分片。
关键注意事项
禁止手动修改数据:
local
中的集合(如oplog.rs
)由 MongoDB 自动维护,手动修改可能导致数据损坏或副本集崩溃。
备份特殊处理:
- 使用
mongodump
备份时,默认会跳过local
数据库。若需备份oplog.rs
,需显式指定:mongodump --oplog
- 使用
存储限制:
oplog.rs
大小固定(默认占用 5% 的磁盘空间),可通过以下方式调整:mongod --oplogSize 1024 # 单位: MB
独立实例与副本集的区别:
- 独立实例(非副本集)的
local
数据库仅包含基本日志,无oplog.rs
。
- 独立实例(非副本集)的
应用场景示例
诊断副本集问题:
# 查看副本集节点的 oplog 状态 use localdb.oplog.rs.find().limit(1)
查看节点启动日志:
use localdb.startup_log.find().sort({ startTime: -1 }).limit(1)
相关系统数据库对比
数据库名 | 用途 |
---|---|
admin |
存储全局用户权限、集群配置(如分片配置)。 |
config |
分片集群中存储分片、块的元数据(仅在分片集群中存在)。 |
local |
当前节点的内部数据(如日志、副本集状态)。 |
总结
local
是 MongoDB 实例的“私人数据空间”,用于维护自身运行状态,不参与数据复制。- 除非明确需要诊断底层问题,否则避免直接操作
local
数据库。