在本页面
MongoDB使用预写日志记录到磁盘日志上,以确保写操作的持久性。
WiredTiger存储引擎不需要日志即可保证崩溃后的状态一致。在恢复过程中,数据库将恢复到最后一个一致的检查点 。但是,如果MongoDB在检查点之间意外退出,则需要日志记录来恢复在最后一个检查点之后发生的写入。
注意
从MongoDB 4.0开始,您无法指定--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
启用mongod
日记功能后,如果意外停止,程序可以恢复写入日记的所有内容。MongoDB将在重新启动时重新应用写入操作,并保持一致状态。默认情况下,丢失的写操作(即未写到日志上)的最大程度是最近100毫秒内进行的写操作,加上执行实际日记写操作所花费的时间。有关commitIntervalMs
详细信息,请参见
。
警告
不要在生产系统上禁用日记功能。
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
要为独立部署禁用日记功能
mongod
,请--nojournal
从命令行选项开始。
您可以使用Write Concern和j
选项获得提交确认。有关详细信息,请参见“
编写关注点”。
该serverStatus
命令/ db.serverStatus()
方法返回wiredTiger.log
,它包含了该杂志的统计数据。
崩溃后重新启动时,MongoDB会在服务器可用之前重播日志目录中的所有日志文件。如果MongoDB必须重播日志文件,请mongod
在日志输出中记录这些事件。
没有理由去跑步--repair
。
使用WiredTiger存储引擎时,默认情况下,MongoDB使用
snappy
压缩程序作为日志。要为mongod
实例指定其他压缩算法或不压缩:
小费
如果mongod
在此过程中遇到不正常的关机,则必须使用旧的压缩程序设置来恢复日志文件。恢复后,您可以重试该过程。
使用以下过程更改独立mongod
实例的日志压缩器:
将storage.wiredTiger.engineConfig.journalCompressor
设置更新为
新值。
如果使用命令行选项而不是配置文件,则必须--wiredTigerJournalCompressor
在下面的重新启动过程中更新命令行选项。
执行干净关闭mongod
实例。例如,将mongo
外壳连接到实例并发出
db.shutdownServer()
:
一旦确认该进程不再运行,请重新启动mongod
实例:
如果您使用的是配置文件:
如果您使用命令行选项而不是配置文件,请更新该--wiredTigerJournalCompressor
选项。
使用以下过程更改副本集成员的日志压缩器:
注意
以下过程涉及在没有日志的情况下作为独立实例重新启动副本成员。
执行干净关闭mongod
实例。例如,将mongo
外壳连接到实例并发出
db.shutdownServer()
:
更新配置文件以准备独立启动:
storage.journal.enabled
到false
。disableLogicalSessionCacheRefresh
为
。true
setParameter
例如:
如果使用命令行选项而不是配置文件,则必须在重新启动期间更新命令行选项。
重新启动mongod
实例:
如果您使用的是配置文件:
如果您使用命令行选项而不是配置文件,
包括--nojournal
选项
在选项中将参数设置disableLogicalSessionCacheRefresh
为。true
--setParameter
对mongod
实例执行干净关闭:
确认该进程不再运行。
更新配置文件以准备使用新的日志压缩器作为副本集成员重新启动:
storage.journal.enabled
设置。disableLogicalSessionCacheRefresh
参数。storage.wiredTiger.engineConfig.journalCompressor
设置以使用默认的日志压缩器或指定新值。例如:
如果使用命令行选项而不是配置文件,则必须在下面的重新启动过程中更新命令行选项。
mongod
作为副本集成员重新启动实例:
如果您使用的是配置文件:
如果您使用命令行选项而不是配置文件:
--nojournal
选项。--wiredTigerJournalCompressor
命令行选项以使用默认的日志压缩器或更新为新值。disableLogicalSessionCacheRefresh
参数。使用以下过程更改分片副本集或配置服务器副本集的成员的日记压缩器:
注意
以下过程涉及在没有日志的情况下作为独立实例重新启动副本成员。
执行干净关闭mongod
实例。例如,将mongo
外壳连接到实例并发出
db.shutdownServer()
:
更新配置文件以准备独立启动:
storage.journal.enabled
到false
。skipShardingConfigurationChecks
为true。disableLogicalSessionCacheRefresh
为
。true
setParameter
sharding.clusterRole
设置。net.port
如果未明确设置,请将设置为成员的当前端口。例如:
如果使用命令行选项而不是配置文件,则必须在重新启动期间更新命令行选项。
重新启动mongod
实例:
如果您使用的是配置文件:
如果您使用命令行选项而不是配置文件:
--nojournal
选项。skipShardingConfigurationChecks
为true。disableLogicalSessionCacheRefresh
为。true
--setParameter
--replSet
)。--shardsvr
/ --configsvr
选项。--port
设置为实例的当前端口。对mongod
实例执行干净关闭:
确认该进程不再运行。
更新配置文件以准备使用新的日志压缩器重新启动:
storage.journal.enabled
设置。skipShardingConfigurationChecks
参数设置。disableLogicalSessionCacheRefresh
参数设置。sharding.clusterRole
设置。storage.wiredTiger.engineConfig.journalCompressor
设置以使用默认的日志压缩器或指定新值。例如:
如果使用命令行选项而不是配置文件,则必须在下面的重新启动过程中更新命令行选项。
mongod
作为副本集成员重新启动实例:
如果您使用的是配置文件:
如果您使用命令行选项而不是配置文件:
--nojournal
选项。skipShardingConfigurationChecks
参数设置。disableLogicalSessionCacheRefresh
参数。--wiredTigerJournalCompressor
命令行选项以使用默认的日志压缩器或更新为新值。--shardsvr
/ --configsvr
选项。