MongoDB无法通过命令“service mongod start”启动。

13
当我运行命令 sudo service mongod start 时,MongoDB无法启动,并且当我运行 service mongod status 命令时它显示尚未启动,日志显示如下:
2018-07-05T14:32:03.595+0800 I CONTROL  [main] ***** SERVER RESTARTED *****
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] MongoDB starting : pid=15656 port=27017 dbpath=/var/lib/mongodb 64-bit host=iZbp1ik57sceo226yjpivxZ
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] db version v4.0.0-rc7
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] git version: 7230641bb09b1ceb04c3135cf83a5044c4838906
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] modules: none
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] build environment:
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten]     distmod: ubuntu1604
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten]     distarch: x86_64
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2018-07-05T14:32:03.605+0800 I CONTROL  [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "0.0.0.0", port: 27017 }, processManagement: { timeZoneInfo: "/usr/share/zoneinfo" }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongodb", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2018-07-05T14:32:03.605+0800 I STORAGE  [initandlisten] Detected data files in /var/lib/mongodb created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-07-05T14:32:03.605+0800 I STORAGE  [initandlisten]
2018-07-05T14:32:03.605+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-07-05T14:32:03.605+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-07-05T14:32:03.605+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=488M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-07-05T14:32:04.204+0800 E STORAGE  [initandlisten] WiredTiger error (13) [1530772324:204155][15656:0x7fb5cb734a00], wiredtiger_open: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1530772324:204155][15656:0x7fb5cb734a00], wiredtiger_open: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied
2018-07-05T14:32:04.204+0800 E STORAGE  [initandlisten] WiredTiger error (13) [1530772324:204458][15656:0x7fb5cb734a00], wiredtiger_open: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1530772324:204458][15656:0x7fb5cb734a00], wiredtiger_open: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied
2018-07-05T14:32:04.204+0800 E STORAGE  [initandlisten] WiredTiger error (13) [1530772324:204610][15656:0x7fb5cb734a00], wiredtiger_open: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1530772324:204610][15656:0x7fb5cb734a00], wiredtiger_open: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied
2018-07-05T14:32:04.204+0800 F STORAGE  [initandlisten] Failed to start up WiredTiger under any compatibility version.
2018-07-05T14:32:04.204+0800 F STORAGE  [initandlisten] 13: Permission denied
2018-07-05T14:32:04.204+0800 F -        [initandlisten] Fatal Assertion 28595 at src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 194
2018-07-05T14:32:04.204+0800 F -        [initandlisten]
***aborting after fassert() failure

但是当我尝试使用mongod --auth -f /etc/mongod.conf时,服务器可以启动,并且访问日志文件时显示:

2018-07-05T14:35:34.228+0800 I CONTROL  [main] ***** SERVER RESTARTED *****
2018-07-05T14:35:34.239+0800 I CONTROL  [initandlisten] MongoDB starting : pid=15665 port=27017 dbpath=/var/lib/mongodb 64-bit host=iZbp1ik57sceo226yjpivxZ
2018-07-05T14:35:34.239+0800 I CONTROL  [initandlisten] db version v4.0.0-rc7
2018-07-05T14:35:34.239+0800 I CONTROL  [initandlisten] git version: 7230641bb09b1ceb04c3135cf83a5044c4838906
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten] modules: none
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten] build environment:
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten]     distmod: ubuntu1604
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten]     distarch: x86_64
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2018-07-05T14:35:34.240+0800 I CONTROL  [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "0.0.0.0", port: 27017 }, processManagement: { timeZoneInfo: "/usr/share/zoneinfo" }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongodb", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2018-07-05T14:35:34.240+0800 I STORAGE  [initandlisten] Detected data files in /var/lib/mongodb created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-07-05T14:35:34.240+0800 I STORAGE  [initandlisten]
2018-07-05T14:35:34.240+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-07-05T14:35:34.240+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-07-05T14:35:34.240+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=488M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-07-05T14:35:35.005+0800 I STORAGE  [initandlisten] WiredTiger message [1530772535:5560][15665:0x7f0ab9512a00], txn-recover: Main recovery loop: starting at 18/8960
2018-07-05T14:35:35.113+0800 I STORAGE  [initandlisten] WiredTiger message [1530772535:113878][15665:0x7f0ab9512a00], txn-recover: Recovering log 18 through 19
2018-07-05T14:35:35.179+0800 I STORAGE  [initandlisten] WiredTiger message [1530772535:179582][15665:0x7f0ab9512a00], txn-recover: Recovering log 19 through 19
2018-07-05T14:35:35.248+0800 I STORAGE  [initandlisten] WiredTiger message [1530772535:248647][15665:0x7f0ab9512a00], txn-recover: Set global recovery timestamp: 0
2018-07-05T14:35:35.283+0800 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2018-07-05T14:35:35.311+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-07-05T14:35:35.311+0800 I CONTROL  [initandlisten]
2018-07-05T14:35:35.312+0800 I CONTROL  [initandlisten]
2018-07-05T14:35:35.312+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-07-05T14:35:35.312+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-07-05T14:35:35.312+0800 I CONTROL  [initandlisten]
2018-07-05T14:35:35.312+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 7856 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
2018-07-05T14:35:35.312+0800 I CONTROL  [initandlisten]
2018-07-05T14:35:35.336+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongodb/diagnostic.data'
2018-07-05T14:35:35.337+0800 I NETWORK  [initandlisten] waiting for connections on port 27017

整个配置文件如下:

# mongod.conf
# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
journal:
  enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

#security:
security:
  authorization: enabled

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

那么,它出了什么问题?为什么第一种方法无法运行它,而第二种方法可以启动它?


我已经编辑了问题并在末尾添加了配置文件。 - Jochen Shi
请勿使用图像。它们在移动设备上很难阅读,而且无法复制粘贴等。;) 相反,请添加一个代码块。 - Markus W Mahlberg
@KaushikMakwana 我检查了状态,状态为死亡并显示失败。 - Jochen Shi
@MarkusWMahlberg 抱歉,我已将图像更改为代码块,系统是Ubuntu 16.04。 - Jochen Shi
1
尝试使用以下命令:[sudo] chown mongodb.mongodb -R /var/lib/mongodb && chown mongodb.mongodb /var/log/mongodb/mongod.log && service mongod start。并且,请使用搜索功能。这个问题已经被回答了数百万次。 - Markus W Mahlberg
显示剩余5条评论
3个回答

27

根据@Markus W Mahlberg的说法,运行这些命令后,问题已经解决。

[sudo] chown mongodb.mongodb -R /var/lib/mongodb

1
@MarkusWMahlberg 我也遇到了同样的问题,但是在Window 10下。执行chown mongodb.mongodb -R /var/lib/mongodb命令后出现了chown: invalid user: ‘mongodb.mongodb’ - Leo.W
@Leo.W 我已经有大约15年没有使用Windows了。也许其他人可以提供帮助。在使用搜索功能后,请在http://dba.stackexchange.com上提问。 ;) - Markus W Mahlberg
应该是冒号而不是句号,当然了。请参考chown的man页面。 - Blake
上面的答案中有拼写错误,请将命令更改为 sudo chown mongodb:mongodb -R /var/lib/mongd,注意 mongodb:mongodb 中的冒号和用户名为 mongodb 而不是 mongod - Ouss

7
如果您在测试配置文件时在服务器上以root身份运行mongod命令,如下所示:
$ mongod -f /etc/mongod.conf

mongo服务器将生成mongo.lock文件和WiredTiger.lock文件,以及mongodb文件夹中的其他文件,其所有权为root:root,如下所示:

-rw-------  1 mongodb mongodb      36864 Nov 25 12:03 index-95--8062076833940689665.wt
-rw-------  1 mongodb mongodb      45056 Nov 25 12:03 index-96--8062076833940689665.wt
-rw-------  1 mongodb mongodb      36864 Nov 25 12:03 index-99--8062076833940689665.wt
drwx------  2 mongodb mongodb       4096 Nov 25 15:23 journal/
-rw-------  1 mongodb mongodb      45056 Nov 25 15:32 _mdb_catalog.wt
-rw-------  1 root    root             0 Nov 25 15:32 mongod.lock
-rw-------  1 mongodb mongodb      36864 Nov 25 15:32 sizeStorer.wt
-rw-------  1 mongodb mongodb        114 Oct 17 17:41 storage.bson
-rw-------  1 mongodb mongodb         44 Oct 17 17:41 WiredTiger
-rw-------  1 mongodb mongodb       4096 Nov 25 15:32 WiredTigerLAS.wt
-rw-------  1 root    root            21 Nov 25 15:22 WiredTiger.lock
-rw-------  1 mongodb mongodb       1201 Nov 25 15:32 WiredTiger.turtle
-rw-------  1 mongodb mongodb     188416 Nov 25 15:32 WiredTiger.wt

该服务很可能配置为使用mongodb用户运行mongod,该用户将无权删除或覆盖WiredTiger.lock、mongod.lock或在root用户下运行mongod时创建的任何其他文件。 在这种情况下,解决方案是将文件夹中的所有文件的所有权重置为mongodb用户,例如上述情况中的/var/lib/mongodb/文件夹。
$ sudo chown -R mongodb:mongodb /var/lib/mongodb/

那应该能解决这个问题。

你关于所有权问题是正确的,并且意识到当我们以用户身份(使用sudo)启动mongod进程时会发生这种情况。谢谢! - Bhargav Nanekalva

0
在Mac OS上,
  1. 浏览到你在安装MongoDB时配置的数据目录。例如:data/db,mongod.lock和WiredTiger.lock将在其中出现
  2. sudo chown -R {username}:{groupname} /data/db
  3. 确保已停止任何mongo进程
  4. 运行'mongod'命令

现在,您应该可以看到准备好接受连接的提示符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接