在 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
?數據庫。