更改数据目录后,MongoDB无法启动


10

我已经mongodb使用yum安装了一个实例。现在一切正常。我使用开始了服务service mongod start。它运作良好。然后,我在配置文件中更改了data directorylog path。我再次重新启动服务器,然后启动了服务。但是我得到以下错误:

Restarting mongod (via systemctl):  Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
                                                           [FAILED]

当我给systemctl status mongod.service我时,得到以下内容:

 Loaded: loaded (/etc/rc.d/init.d/mongod)
   Active: failed (Result: exit-code) since Wed 2015-03-18 11:35:56 IST; 22s ago
  Process: 10672 ExecStop=/etc/rc.d/init.d/mongod stop (code=exited, status=0/SUCCESS)
  Process: 10841 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
 Main PID: 10509 (code=exited, status=0/SUCCESS)

Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Mar 18 11:35:56 localhost systemd[1]: Unit mongod.service entered failed state.

当我给journalctl -xn我时,得到以下内容:

-- Logs begin at Wed 2015-03-18 08:56:56 IST, end at Wed 2015-03-18 11:35:56 IST. --
Mar 18 11:30:01 localhost systemd[1]: Starting Session 20 of user root.
-- Subject: Unit session-20.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has begun starting up.
Mar 18 11:30:01 localhost systemd[1]: Started Session 20 of user root.
-- Subject: Unit session-20.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has finished starting up.
-- 
-- The start-up result is done.
Mar 18 11:30:01 localhost CROND[10712]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
-- Subject: Unit mongod.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mongod.service has begun starting up.
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

谁能帮我解决这个问题?谢谢!!!

PS:我创建的数据目录具有用户的所有权限。但是再次,如果我将数据目录更改为默认(/var/lib/mongodb),则可以正常工作。

Answers:


6

我遇到了类似的问题,就mongod.conf我而言,它是一个配置错误的文件。也可能是新目录的权限设置不正确。 chown -R mongod:mongod <directory name>这就是我确保访问权限的方式(当然也是chmod 600 <dir>如此)。最后,运行ls -Z以确保上下文正确。我只是将它与对我有用的默认目录进行了比较。

如果尚未解决,请同时显示日志文件的内容。那里可能有一些线索。


4

扩展@mustaccio所说的内容,对我来说,答案是新的logpath和上的SELinux上下文dbpath。我运行了以下命令,一切都很好:

sudo chcon -Rv --type=mongod_log_t $logpath
sudo chcon -Rv --type=mongod_var_lib_t $dbpath

(这是在RHEL 7.1 btw上)


4

我在Raspberry Pi和Ubuntu服务器上都有它。

“ mongod.service的工作失败。有关详细信息,请参见“ systemctl status mongod.service”和“ journalctl -xn”。”

由于不同的原因,我在不同的场合遇到了这个问题:

  1. 命名错误的.c​​onf文件 – mongodb脚本(我移至/etc/init.d/mongodb),CONF=/etc/mongod.conf实际文件为时的第57行/etc/mongodb.conf。更改第57行更正了它。另外,我可以将脚本名称更改为相同的名称。

  2. mongod.lock文件 –上次mongod停止时,它没有机会关闭数据库。这将在数​​据库文件夹中保留一个文件mongod.lock。文件夹内是一个数字(我相信这是mongo最后使用的PID)。如果该文件存在,则将无法启动mongod服务。删除文件,然后重试。

  3. mongo用户 –我需要创建一个Linux用户,该用户将负责启动和运行mongod.service。我命名了我的mongo并更新了我的/etc/init.d/mongodb脚本(第95行)DAEMONUSER=${DAEMONUSER:-mongo}。当然,这仅在您创建了名为mongo的新用户(或您想要的任何方式)后才有效。

  4. DB权限 –这是一种流行的权限。声明数据库文件夹的位置后,您需要确保“ mongo”用户拥有该文件的所有权。例如,我的数据库存储在/data/db。我运行以下命令:
    sudo chown –R mongo:mongo /data
    并将所有权/data及其所有子目录的所有权移给mongo用户。

  5. 错误的服务 -这让我有些尴尬。我试图以mongo服务而不是的身份开始mongodmongo是您可以运行的外壳,并直接手动将命令输入到mongo。这就是我创建数据库并添加一些对象的方式。mongod另一方面是mongo守护程序,该守护程序在后台运行,托管您的数据库以供您编写/使用的其他应用程序访问。确保不要将它们混入conf文件,脚本等中的任何位置。

希望其中之一可以为您解决问题。

附带一提,我的mongodb.conf文件为空。即使它为空,您也需要正确指向它。


2

我已经尝试过了,而且效果很好。

sudo chown -R mongodb:mongodb /var/log/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chmod -R 755 /var/lib/mongodb
sudo chmod -R 755 /var/log/mongodb

1

我遇到了从Centos 7 Repos附带的mongo升级到Mongos自己的repos的问题。实际上是从V2升级到V3。

事实是centos 7 repo需要用户mongodb,而mongos自己的repo希望用户mongod

最后,是旧安装中仍然存在的日志文件,新安装无法写入该日志文件,因为用户名不同并且我没有注意到。


1

在我的系统(Fedora)上,我在tmpfs(ram)上有“ / var / log”,si每次重新启动该分区上的所有内容时都会丢失。许多人这样做是因为他们拥有SSD驱动器,并希望减少I / O(节省驱动器寿命)。

解决方案是创建/ var / log / mongodb目录,并在每次系统重新引导时将mongodb设置为所有者。

使用如下脚本:

#!/bin/sh
sudo mkdir /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb

如果您不确定mongod使用的用户是什么,请执行以下操作:

cat /etc/passwd | grep mongo

将脚本添加到系统启动中。


0

您不编辑路径。我通过命令解决了这个问题:

mongod --dbpath /data/mongo

0

这是一个权限问题。当我们更改数据目录或日志文件的路径时,我们必须授予新目录的权限。然后运行正常。如果像这样发生任何问题,请首先检查日志文件“ mongod.log”。


这没有帮助,我向运行mongod服务的用户授予了“日志”文件夹的完全权限,我使用的是Windows Server2016。在更改日志文件的路径后,仍然无法重新启动服务,仍然错误:“服务未响应控制功能。”,请问有什么想法吗?
埃迪·库玛

0

停止MongoDB服务器:

service mongod stop

将mongo目录复制到新目录:

rsync -av /var/lib/mongo /home/data/

重命名旧目录:

mv /var/lib/mongo /var/lib/mongo.bak

符号链接到新位置:

ln -s /home/data/mongo /var/lib/mongo

启动MongoDB服务器:

service mongod start
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.