On this page
Manage Journaling
在本页面
MongoDB 使用预先写入日志到磁盘journal上,以保证write operation的持久性。 MMAPv1 存储引擎还需要日志,以提供崩溃恢复能力。
WiredTiger 存储引擎不需要日志即可保证崩溃后的状态一致。在恢复过程中,数据库将恢复到最后一个一致的checkpoint。但是,如果 MongoDB 在检查点之间意外退出,则需要日志记录来恢复在最后一个检查点之后发生的写入。
启用日记功能后,如果mongod意外停止,则程序可以恢复写入日记的所有内容。 MongoDB 将在重新启动时重新应用写入操作,并保持一致状态。默认情况下,最大程度的丢失写操作(即未写到日志上)是最近 100 毫秒内进行的写操作,加上执行实际日记写操作所花费的时间。有关默认设置的更多信息,请参见commitIntervalMs。
Procedures
Disable Journaling
Warning
不要在生产系统上禁用日记功能。
- 在版本 3.6 中,使用WiredTiger 存储引擎弃用了副本集成员的--nojournal选项。
使用 WiredTiger storage engine的副本集成员不应使用--nojournal选项。有关日记的更多信息,请参见Manage Journaling。
- 当使用不带日志的 MMAPv1 存储引擎时,如果您的mongod实例停止运行而没有出于任何原因(例如断电)意外关闭,并且您没有使用日志运行,则必须从不受影响的replica set成员或备份中恢复,如repair中所述。
要禁用日记功能,请使用--nojournal命令行选项启动mongod。
取得提交确认
您可以使用Write Concern和j选项获得提交确认。有关详细信息,请参见Write Concern。
避免 MMAPv1 的预分配滞后
对于MMAPv1 存储引擎,如果mongod进程确定预分配日记文件比根据需要创建新的日记文件更有效,则 MongoDB 可以预分配日记文件。
根据您的文件系统,首次启动启用日记功能的mongod实例时,可能会遇到预分配滞后的情况。预分配文件所需的时间可能持续几分钟。在此期间,您将无法连接到数据库。这是一次性的预分配,以后的调用不会发生。
为避免preallocation lag,您可以通过从另一个mongod实例复制它们来在日志目录中预分配文件。
预分配的文件不包含数据。以后将它们删除是安全的。但是,如果您使用日志记录重新启动mongod,则mongod将再次创建它们。
Example
以下序列为数据库端口/data/db
在端口27017
上运行的mongod实例预分配日记文件。
为了演示起见,该序列以通常的方式从创建一组日志文件开始。
- 创建一个临时目录,在其中创建一组日记文件:
mkdir ~/tmpDbpath
- 通过启动使用临时目录的mongod实例来创建一组日记文件。例如:
mongod --port 10000 --dbpath ~/tmpDbpath --journal --bind_ip localhost,<hostname(s)|ip address(es)> --storageEngine mmapv1
Tip
Warning
绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication和加强网络基础设施。
... NETWORK [initandlisten] waiting for connections on port 10000
- 通过将日记文件从现有实例的数据目录移动到新实例的数据目录中,为mongod的新实例预分配日记文件:
mv ~/tmpDbpath/journal /data/db/
- 启动新的mongod实例。例如:
mongod --port 27017 --dbpath /data/db --journal --bind_ip localhost,<hostname(s)|ip address(es)> --storageEngine mmapv1
Tip
Warning
绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication和加强网络基础设施。
监视日记状态
serverStatus command/db.serverStatus()方法返回wiredTiger.log,其中包含 WiredTiger 日记的统计信息。
更改 MMAPv1 的组提交间隔
对于MMAPv1 存储引擎,您可以使用--journalCommitInterval命令行选项设置组提交间隔。允许的范围是2
到300
毫秒。
较低的值会增加日志的持久性,但会降低磁盘性能。
意外关机后恢复数据
崩溃后重启后,MongoDB 会在服务器可用之前重播日志目录中的所有日志文件。如果 MongoDB 必须重播日志文件,则mongod在日志输出中记录这些事件。
在这种情况下,没有理由运行repairDatabase。
更改 WT Journal Compressor
对于 WiredTiger 存储引擎,默认情况下,MongoDB 使用snappy
压缩器作为日志。要为mongod实例指定其他压缩算法或不压缩,请执行以下操作:
Tip
如果在此过程中遇到mongod异常关闭的情况,则必须使用旧的压缩器设置来恢复日志文件。恢复后,您可以重试该过程。
如果使用命令行选项而不是配置文件,则必须在下面的重新启动过程中更新--wiredTigerJournalCompressor命令行选项。
- 对mongod实例执行干净关闭:
db.getSiblingDB('admin').shutdownServer()
一旦确认该进程不再运行,请重新启动mongod实例:
如果您使用的是配置文件:
mongod -f <path/to/myconfig.conf>
- 如果您使用命令行选项而不是配置文件,请更新--wiredTigerJournalCompressor选项。
mongod --wiredTigerJournalCompressor <differentCompressor|none> ...