mongodb服务未启动


73

我已经使用mongodb-10gen debian软件包安装了mongodb 2.0.3。一切正常,除了默认情况下在计算机启动时未启动的服务。的mongod运行仅作为根用户。也许这就是原因。但据我所知,服务应该正在运行,因为它们是由root用户添加的。

有什么解决方案?

如果我只是跑 mongod

Tue Mar 27 13:00:44 [initandlisten] couldn't open /data/db/transaction_processor_dummy_development.ns errno:1 Operation not permitted

如果我运行sudo service mongodb start它说:

mongodb start/running, process 4861

但有一个与期待时,没有过程htop,并mongo说:

MongoDB shell version: 2.0.3
connecting to: test
Tue Mar 27 13:02:40 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84
exception: connect failed

2
需要更多信息。您如何尝试启动MongoDB?您在控制台中看到什么错误消息(如果有)?如果我的[Ubuntu]机器在没有干净关机的情况下关闭电源,则必须手动删除,/var/lib/mongodb/mongod.lock然后使用重启MongoDB sudo service mongodb start
亚当·蒙森

如果从sudo mongod删除后开始,/data/db/mongod.lock它可以正常运行。
Esenbek Kydyr uulu 2012年

1
这并不适用于这里,因为它的Linux,但Windows的问题是可以解决的使用:stackoverflow.com/questions/4661670/...
詹姆斯Oravec

Answers:


119

在我的ubuntu服务器上,只需运行:

sudo rm /var/lib/mongodb/mongod.lock
mongod --repair
sudo service mongodb start

1
谢谢你!但是有办法永久解决此问题吗?我看到下面的一些解决方案,这些解决方案涉及每次重新启动时都运行此命令,但是还有更好的方法吗?
Deepak Joy 2015年

太棒了,这对我有用。很高兴我向下滚动找到投票最高的答案。smh StackOverflow,当没有可接受的问题解决方案时,您必须在上面获得这些获得较高投票的答案。好奇地知道是什么原因导致此MongoDB问题
Hamman Samuel 2015年

@HammanSamuel对答案进行排序取决于您,而不是您。如果按投票方式对答案进行排序,则会在顶部看到该答案:)
NSNoob

对于使用代码关闭时出错的人:48 at mongd --repair应该首先通过连接到mongo shell并键入use admin ,然后输入db.shutdownServer()来停止mongod服务,然后再运行repair命令即可解决问题
mzparacha

32

固定!

原因是中的dbpath变量/etc/mongodb.conf。以前,我使用的是mongodb 1.8,其中dbpath的默认值为/data/db。upstart作业mongodb(与mongodb-10gen软件包一起提供)调用mongodwith--config /etc/mongodb.conf选项。

作为解决方案,我只需要/data/db递归地更改目录的所有者。


30

如果您的文件权限以某种方式更改,也会发生这种情况。删除锁定文件无济于事,并且日志文件中出现错误,例如:

2016-01-20T09:14:58.210-0800 [initandlisten] warning couldn't write to / rename file /var/lib/mongodb/journal/prealloc.0: couldn't open file    /var/lib/mongodb/journal/prealloc.0 for writing errno:13 Permission denied
2016-01-20T09:14:58.288-0800 [initandlisten] couldn't open /var/lib/mongodb/local.ns errno:13 Permission denied
2016-01-20T09:14:58.288-0800 [initandlisten] error couldn't open file /var/lib/mongodb/local.ns terminating

所以,去检查权限:

ls -l /var/lib/mongodb

total 245780
drwxr-xr-x 2 mongodb mongodb     4096 Jan 20 09:14 journal
drwxr-xr-x 2 root    root        4096 Jan 20 09:11 local
-rw------- 1 root    root    67108864 Jan 20 09:11 local.0
-rw------- 1 root    root    16777216 Jan 20 09:11 local.ns
-rwxr-xr-x 1 mongodb nogroup        0 Jan 20 09:14 mongod.lock

修理:

# chown -R mongodb:mongodb /var/lib/mongodb

如果仍然存在,请删除锁定文件:

# rm /var/lib/mongodb/mongod.lock

启动mongodb

# service mongodb start

尾巴日志,您应该在日志末尾看到:

tail -f /var/log/mongodb/mongodb.log
2016-01-20T09:16:02.025-0800 [initandlisten] waiting for connections on port 27017

1
这对我有用。root用户有一些数据库文件
Girish Gupta

谢谢,这解决了我的问题!
JDev

谢谢,这个工作,需要运行这个命令sudo的太多
Rakshitha Muranga罗德里戈

21

我对这个问题感到无聊,所以我决定创建一个Shell脚本来轻松恢复我的mongo数据库。

#!/bin/sh
sudo rm /var/lib/mongodb/mongod.lock
sudo -u mongodb mongod -f /etc/mongodb.conf --repair
sudo service mongodb start

http://ideone.com/EuqDZ8


13

请记住,通过强制删除.lock文件重新启动数据库时,数据可能会损坏。如果以这种方式重新启动服务器,则不应将其视为“健康”服务器。

要修改情况,请运行

mongod --repair

要么

> db.repairDatabase();    

在mongo shell中将您的数据库恢复为“正常”状态。


1
谢谢。我跑了mongod --repair,它升级了我的数据库。这是必需的。但是该服务仍未启动。
Esenbek Kydyr uulu 2012年

11

1-如果启用,则禁用fork选项/etc/mongodb.conf

2-修复数据库

mongod --repair --dbpath DBPATH

3-杀死当前的mongod进程

查找mongo进程

ps -ef | grep mongo

你会得到mongod PID

mongodb   PID     1  0 06:26 ?        00:00:00 /usr/bin/mongod --config /etc/mongodb.conf

停止当前的mongod进程

kill -9 PID

4-启动mongoDB服务

service mongodb start

5

有时您需要删除.lock文件以使服务运行


5

对于ubunto来说,实现它并且真正简单的是安装mongodb软件包:

sudo apt-get install  mongodb

不,不要使用此命令,它会安装旧版本的mongdb
Nisharg Shah

4
sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
sudo service mongodb start

4

请检查您对“ data ”文件夹的权限。这是一个权限问题,因为linux用户将由于SE linux权限而面临此问题。因此,您将“ data ”文件夹的ownerand组都更改为“ mongodb


我一直试图弄清楚为什么mongod服务没有选择自定义数据文件夹。那是权限问题。/ var / lib / mongodb,/ var / log / mongodb和your-custom-data-path应该正确拥有mongodb用户权限,包括任何子文件夹。
阿布巴克锡迪克

3

只需重新安装mongo,它就可以正常工作。没有丢失的收藏。对我来说最简单的解决方案


3

Nianliang的解决方案在我的Vagrant ubunuto中非常有用,因此我最终将这两个命令添加到了/etc/init.d/mongodb文件中:

.
.
.    
start|stop|restart)
        rm /var/lib/mongodb/mongod.lock
        mongod --repair
.
.
.

3

如果您的logpath路径上的磁盘已满(例如,如果您有专用的/log/目录/驱动器且磁盘已满),也会发生这种情况。

这使我感到恐慌了15分钟,因为它还阻止您mongod.log在启动过程时阅读,因此很难进行故障排除。



2

我采取了另一种方法:

背景:我将mongodb(服务器本地的单节点)用作暂存区。

我根据MongoDB文档中提供的说明安装了mongo。

因此,这不是“主要”基础架构,不需要一直保持运行状态,但仍然必不可少。

我的工作:在我的运行脚本中,我使用以下命令检查mongo是否正在运行:

if pgrep "mongod" >/dev/null 2>&1

如果没有运行,那么我运行

sudo mongod &

像魅力一样工作,无需设置等。

如果您的用例相似,请告诉我它是否也适用。

祝好运!


2

我有一个问题,启动服务mongodb失败,没有日志。我所做的纠正错误的操作是为用户mongodb提供对目录/ var / log / mongodb的写访问权


1

帮助我诊断问题的是运行mongod并指定/etc/mondgob.conf配置文件:

mongod --config /etc/mongodb.conf

这表明/etc/mongdb.conf中的某些选项是“无法识别的”。我已经注释掉了下面的两个选项,security:并且仅security:在一行上单独留下了注释,这导致该服务无法启动。这看起来像个错误。

security:
#  authorization: enabled
#  keyFile: /etc/ssl/mongo-keyfile

^^错误

#security:
#  authorization: enabled
#  keyFile: /etc/ssl/mongo-keyfile

^^正确评论。


1

删除.lock文件并重新安装并不能解决我的计算机上的问题(Ubuntu 19.10)。问题在于,意外关闭后,MongoDB袜子不再属于MongoDB组和用户。

因此,我按照以下步骤操作:

  1. cd / tmp
  2. ls * .sock
  3. 更改用户:组权限:

    chown mongodb:mongodb <YOUR_SOCK>
    
  4. sudo systemctl启动mongod

  5. sudo systemctl status mongod

0

为Ubuntu 14.04安装mongodb

sudo nano /etc/apt/sources.list.d/mongodb-org-3.2.list

echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

sudo apt-get update

sudo apt-get install -y mongodb-org=3.2.10 mongodb-org-server=3.2.10 mongodb-org-shell=3.2.10 mongodb-org-mongos=3.2.10 mongodb-org-tools=3.2.10

0

我曾为类似的问题而苦苦挣扎,并相应地分享了解决方案。我们使用mongo副本集,并且我的辅助服务器上的mongo服务花费了很长时间才能启动。(约10至15分钟)

在尝试使用--dbpath中的其他文件夹配置mongo之前,找不到任何东西,并且工作正常,因此我们知道早先的路径(即安装目录)存在一些问题。因此,与nss团队一起解决了网络安装问题。

希望这可以帮助某人


0

这是一个奇怪的问题,请确保配置文件中的间距一致。

例如:

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

security:
    authorization: 'enabled'

如果授权密钥前面有4个空格(如上),其余为2个空格,则它将不起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.