Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

为自管理部署配置日志

在此页面上

  • 步骤

MongoDB使用预写入式记录到磁盘上的日志来保证写入操作的持久性。

WiredTiger 存储引擎崩溃后不需要通过记录日志来保证一致状态。在恢复期间,数据库将恢复到最后一个一致的检查点。但是,如果 MongoDB 在检查点之间意外退出,则需要记录日志来恢复最后一个检查点之后发生的写入操作。

注意

您不能为使用WiredTiger存储引擎的副本集成员指定 --nojournal选项或storage.journal.enabled: false

启用日志功能后,如果mongod意外停止,该程序可以恢复写入日志的所有内容。 MongoDB将在重启时重新应用写入操作并保持一致的状态。 默认,最大的丢失写入(即未对日志进行的写入)是最后100毫秒内进行的写入,加上执行实际日志写入所需的时间。 有关默认的更多信息,请参阅commitIntervalMs

警告

不要在生产系统上禁用日志功能。

  • 您不能为使用WiredTiger存储引擎的副本集成员指定--nojournal选项或storage.journal.enabled: false

要为独立运行运行的部署禁用日志功能,请使用 命令行选项启动mongod --nojournal

可以使用写关注j 选项获得提交确认。有关详细信息,请参阅写关注

serverStatus 命令/ db.serverStatus() 方法返回 wiredTiger.log,其中包含日志的统计信息。

崩溃后重新启动时,MongoDB 会在服务器可用之前播放位于日志目录中的所有日志文件。如果 MongoDB 必须重新播放日志文件,mongod 会在日志输出中记录这些事件。

没有理由运行 --repair

对于 WiredTiger 存储引擎,MongoDB 默认使用snappy压缩器作为日志。为mongod实例指定不同的压缩算法或不进行压缩:

提示

如果在此过程中遇到 mongod 非正常关机,则必须使用旧的压缩器设置来使用日志文件进行恢复。恢复后,您可以重试该过程。

使用以下步骤更改独立 mongod 实例的日志压缩器:

  1. storage.wiredTiger.engineConfig.journalCompressor设置更新为新值。

    如果使用命令行选项而不是配置文件,则必须在下面的重启过程中更新--wiredTigerJournalCompressor命令行选项。

  2. 干净关闭mongod实例。 示例,将 mongosh连接到实例并发出db.shutdownServer()

    db.getSiblingDB('admin').shutdownServer()
  3. 确认该进程停止运行后,重新启动 mongod 实例:

    • 如果您在使用配置文件:

      mongod -f <path/to/myconfig.conf>
    • 如果使用命令行选项而不是配置文件,请更新--wiredTigerJournalCompressor选项。

      mongod --wiredTigerJournalCompressor <differentCompressor|none> ...

使用以下过程更改副本集成员的日志压缩器:

注意

以下过程涉及在没有日志的情况下将副本成员作为独立节点重新启动。

  1. 干净关闭mongod实例。 示例,将mongosh连接到实例并发出db.shutdownServer()

    db.getSiblingDB('admin').shutdownServer()
  2. 更新配置文件以准备以独立运行的实例重新启动:

    例如:

    storage:
    journal:
    enabled: false
    #replication:
    # replSetName: replA
    setParameter:
    disableLogicalSessionCacheRefresh: true

    如果使用命令行选项而不是配置文件,则必须在重启期间更新命令行选项。

  3. 重新启动mongod实例:

    • 如果您在使用配置文件:

      mongod -f <path/to/myconfig.conf>
    • 如果使用命令行选项而不是配置文件,

      • 包含--nojournal选项

      • 删除所有复制命令行选项(例如--replSet ):

      • --setParameter 选项中将参数 disableLogicalSessionCacheRefresh 设置为 true

        mongod --nojournal --setParameter disableLogicalSessionCacheRefresh=true ...
  4. 干净关闭mongod实例:

    db.getSiblingDB('admin').shutdownServer()

    确认该进程不再运行。

  5. 更新配置文件,以准备使用新的日志压缩器作为副本集成员重新启动:

    例如:

    storage:
    wiredTiger:
    engineConfig:
    journalCompressor: <newValue>
    replication:
    replSetName: replA

    如果使用命令行选项而不是配置文件,则必须在下面的重启过程中更新命令行选项。

  6. 以副本集成员身份重新启动mongod实例:

    • 如果您在使用配置文件:

      mongod -f <path/to/myconfig.conf>
    • 如果使用命令行选项而不是配置文件:

      mongod --wiredTigerJournalCompressor <differentCompressor|none> --replSet ...

使用以下过程更改分分片副本集或配置服务器副本集成员的日志压缩器:

注意

以下过程涉及在没有日志的情况下将副本成员作为独立节点重新启动。

  1. 干净关闭mongod实例。 示例,将mongosh连接到实例并发出db.shutdownServer()

    db.getSiblingDB('admin').shutdownServer()
  2. 更新配置文件以准备以独立运行的实例重新启动:

    例如:

    storage:
    journal:
    enabled: false
    setParameter:
    skipShardingConfigurationChecks: true
    disableLogicalSessionCacheRefresh: true
    #replication:
    # replSetName: shardA
    #sharding:
    # clusterRole: shardsvr
    net:
    port: 27218

    如果使用命令行选项而不是配置文件,则必须在重启期间更新命令行选项。

  3. 重新启动mongod实例:

    • 如果您在使用配置文件:

      mongod -f <path/to/myconfig.conf>
    • 如果使用命令行选项而不是配置文件:

      mongod --nojournal --setParameter skipShardingConfigurationChecks=true --setParameter disableLogicalSessionCacheRefresh=true --port <samePort> ...
  4. 干净关闭mongod实例:

    db.getSiblingDB('admin').shutdownServer()

    确认该进程不再运行。

  5. 更新配置文件以准备使用新的日志压缩器重新启动:

    例如:

    storage:
    wiredTiger:
    engineConfig:
    journalCompressor: <newValue>
    replication:
    replSetName: shardA
    sharding:
    clusterRole: shardsvr
    net:
    port: 27218

    如果使用命令行选项而不是配置文件,则必须在下面的重启过程中更新命令行选项。

  6. 以副本集成员身份重新启动mongod实例:

    • 如果您在使用配置文件:

      mongod -f <path/to/myconfig.conf>
    • 如果使用命令行选项而不是配置文件:

      mongod --shardsvr --wiredTigerJournalCompressor <differentCompressor|none> --replSet ...

后退

内存型

在此页面上