MongoDB Requested option conflicts with current storage engine option for directoryPerDB

本文解决了一个关于在Windows 7系统上安装并配置MongoDB 3.2服务时遇到的问题。服务启动失败,错误提示涉及系统信号灯及存储引擎冲突。通过删除特定的storage.bson文件解决了问题。

win7 64 位 安装mongodb 3.2 ,安装后添加服务到windows中,正常。


配置文件如下:

dbpath= D:\MongoDB\Server\3.2\data\db
logpath= D:\MongoDB\Server\3.2\data\log\mongodb.log
port = 27017
logappend = true
journal = true

但是启动服务报错:


windows 系统事件提示错误:

MongoDB 服务因 无法创建另一个系统信号灯。 服务特定错误而停止。


mongodb.log 记录错误如下:

2016-12-23T10:55:31.040+0800 I CONTROL  [main] ***** SERVER RESTARTED *****
2016-12-23T10:55:31.195+0800 I CONTROL  [main] Hotfix KB2731284 or later update is not installed, will zero-out data files
2016-12-23T10:55:31.195+0800 I CONTROL  [main] Trying to start Windows service 'MongoDB'
2016-12-23T10:55:31.196+0800 I STORAGE  [thread1] Service running
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] MongoDB starting : pid=5212 port=27017 dbpath=D:\MongoDB\Server\3.2\data\db 64-bit host=Itinside-89
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] db version v3.2.7
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] git version: 4249c1d2b5999ebbf1fdf3bc0e0e3b3ff5c0aaf2
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1p-fips 9 Jul 2015
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] modules: none
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] build environment:
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten]     distmod: 2008plus-ssl
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten]     distarch: x86_64
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2016-12-23T10:55:31.196+0800 I CONTROL  [initandlisten] options: { config: "D:\MongoDB\Server\3.2\mongod.cfg", net: { port: 27017 }, service: true, storage: { dbPath: "D:\MongoDB\Server\3.2\data\db", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "D:\MongoDB\Server\3.2\data\log\mongodb.log" } }
2016-12-23T10:55:31.196+0800 I -        [initandlisten] Detected data files in D:\MongoDB\Server\3.2\data\db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2016-12-23T10:55:31.196+0800 I STORAGE  [initandlisten] exception in initAndListen: 72 Requested option conflicts with current storage engine option for directoryPerDB; you requested false but the current server storage is already set to true and cannot be changed, terminating
2016-12-23T10:55:31.197+0800 I CONTROL  [serviceStopWorker] dbexit:  rc: 49

存储引擎有冲突? 因为刚才在命令行启动过一次服务,生成了数据文件等。正常来说,mongodb 3.2 默认存储引擎是 WiredTiger ,应该不会冲突。错误提示数据文件也是由该存储引擎创建的。找了好久,无法解答。看到数据文件中有 一个文件  storage.bson



把文件删除,启动服务,正常启动了!!!


进入mongodb ,查看当前存储引擎:

db.serverStatus().storageEngine


存储引擎是 WiredTiger 没错。只是不知怎么地  storage.bson 不一样。


参考:

Storage Engines

Compatibility Changes in MongoDB 3.2


### 解决 MongoDB 中 `Unrecognized option: storage.journal` 错误 在 Linux 系统中,如果遇到 `Unrecognized option: storage.journal` 错误,通常是因为 MongoDB 的配置文件中包含了不被当前版本支持的选项。以下是关于此问题的详细分析和解决方案。 #### 错误原因 MongoDB 的 `storage.journal` 选项在较新的版本中已被移除或不再需要显式配置[^3]。默认情况下,MongoDB 启用日志功能(journaling),并且不需要在配置文件中明确指定 `storage.journal.enabled`。如果在配置文件中添加了该选项,MongoDB 可能会将其视为无效配置项,从而抛出 `Unrecognized option` 错误。 #### 配置文件示例 以下是一个标准的 MongoDB 配置文件示例,去除了可能导致错误的 `storage.journal` 配置项: ```yaml systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true processManagement: fork: true net: bindIp: 127.0.0.1 port: 27017 setParameter: enableLocalhostAuthBypass: false ``` #### 解决方法 1. **检查 MongoDB 版本** 确保了解当前使用的 MongoDB 版本,因为不同版本对配置项的支持有所不同。可以通过以下命令检查版本: ```bash mongod --version ``` 2. **修改配置文件** 删除配置文件中的 `storage.journal` 相关内容。例如,如果存在以下行: ```yaml storage: journal: enabled: true ``` 则应将其删除或注释掉。 3. **验证配置文件语法** 使用以下命令验证配置文件是否正确: ```bash mongod --config /etc/mongod.conf --dryRun ``` 如果配置文件中有任何错误,此命令将输出具体的错误信息。 4. **重启 MongoDB 服务** 修改配置文件后,重启 MongoDB 服务以应用更改: ```bash systemctl restart mongod ``` #### 注意事项 - 如果需要禁用日志功能,可以通过设置 `--nojournal` 参数实现,但不建议在生产环境中使用此选项。 - 确保所有相关目录的权限已正确设置为 `mongodb:mongodb`,例如数据库路径和日志路径[^1]。 ```bash chown -R mongodb:mongodb /var/lib/mongodb chown -R mongodb:mongodb /var/log/mongodb ``` ### 示例:正确的配置文件结构 以下是一个完整的 MongoDB 配置文件示例,适用于大多数生产环境: ```yaml systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: 127.0.0.1 port: 27017 setParameter: enableLocalhostAuthBypass: false ``` #### 日志路径说明 - `systemLog.destination` 指定日志输出目标为文件。 - `systemLog.path` 指定日志文件的具体路径。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值