我目前正在使用 MongoDB 3.4.4。
我使用批处理文件运行 MongoDB 。我通常使用+mongo_start
关闭出现的 shell ,而且大多数情况下都能正常工作。但是,当我在 MongoDB 服务器启动时将系统日期回滚到以前的日期(例如将系统日期更改为昨天的日期)时,+停止工作(即 shell 不会关闭)。ctrlcctrlc
这似乎是由参数引起的,--journal
因为当我将其更改为无日志时,即使我将系统日期更改为以前的日期,我也能够使用ctrl+关闭 shell。但在使用较旧的 MongoDB 服务器(也具有该参数)c检查了同样的情况后,我发现在我将系统日期更改为以前的日期后, +关闭了 shell。--journal
ctrlc
我想知道在将系统日期更改为较早的日期后,导致 shell 无法使用ctrl+关闭的具体原因。谢谢!c
答案1
鉴于您的 MongoDB 服务器版本为 3.4.4 以及当前的问题描述(将系统时钟向后更改),我预计升级到 MongoDB 3.4.6 或更高版本将解决此问题。该系列中的最新生产版本目前为 3.4.19(2019 年 1 月 28 日),并且已经有很多修复错误并提高稳定性自 3.4.4 发布(2017 年 4 月 21 日)以来。
存在一些与系统时钟向后跳转相关的问题,这会导致 WiredTiger 在以下情况下停顿或挂起:检查站(例如,参见WT-3331和WT-3327在 MongoDB 问题跟踪器中)。这些问题已在 MongoDB 3.4.6 版本中得到解决。
这也提到了时钟同步MongoDB 生产说明部分:
使用 NTP 同步 MongoDB 部署的所有组件上的时钟。运行具有 WiredTiger 存储引擎的 MongoDB 3.4.5 或更早版本的副本集和分片集群可能会在时钟不可靠的系统上遇到检查点挂起。
It seems like this was caused by the --journal parameter
关闭序列涉及检查点,以使日志写入在数据文件中持久。如果您已禁用日志记录(强烈不建议在生产环境中使用),则每次写入时都会触发检查点。我预计禁用日志记录会降低您的服务器出现包含时钟倒退之前写入的数据的检查点的可能性,尽管如果系统时钟与写入同时更改,您可能仍会在 3.4.4 中遇到问题。