【赵渝强老师】MongoDB的Journal日志
赵渝强老师
编辑于 2026年02月05日 15:37
收录于文集
共42篇

数据是MongoDB的核心,MongoDB通过使用Journal日志保证数据的安全。Journal日志用于记录上一个检查点之后发生的数据更新,并将更新的信息顺序写入Journal日志文件中。通过使用Journal日志能够将数据库从系统异常终止事件中还原到一个有效的状态。通过6.5.1.3小节的介绍了解到,MongoDB使用预写日志机制实现数据的持久化。每个Journal日志文件的大小是100M,并存储在由参数--dbpath指定的下的journal子目录中,如下所示:

代码块
Shell
自动换行
复制代码
tree /data/mydata/journal/

# 输出的信息如下:
/data/mydata/journal/
├── WiredTigerLog.0000000001
├── WiredTigerPreplog.0000000001
└── WiredTigerPreplog.0000000002
复制成功

提示:在默认情况下,MongoDB已经启用了Journal日志记录,如果没有启用可以通过在启动MongoDB服务器时指定参数--journal来启动Journal日志记录。

视频讲解如下:

当MongoDB发生数据丢失时,Journal日志文件可以用于数据的恢复。此时,MongoDB会重新执行从上一个检查点之后发生的数据更新操作,将数据还原到Journal日志记录的一致性状态。数据恢复的过程如下:

(1)从数据文件中查找上一个检查点发生的标识值。

(2)在Journal日志文件中搜索匹配上一个检查点的标识值的日志记录。

(3)重新执行匹配到的所有Journal日志记录以恢复数据。

提示:WiredTiger存储引擎会使用内存缓冲区来存储Journal日志信息,该缓冲区默认大小是128KB。当缓冲区中的日志信息超过了设定的128KB,才会将其写入到Journal日志文件中。这就意味着,如果MongoDB发生异常关机时,使用WiredTiger存储引擎将有可能丢失最大128KB的数据更新。