MongoDB не запускается после изменения каталога данных


10

Я установил mongodbэкземпляр, используя Yum. , Теперь все работает отлично. Я начал службу с помощью service mongod start. Это работает хорошо. Затем я изменил data directoryи log 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 : созданный мной каталог данных имеет все права доступа для пользователя. Но опять же, если я изменю каталог данных на default ( /var/lib/mongodb), он будет работать нормально.

Ответы:


6

Я столкнулся с подобной проблемой и обнаружил, что это неправильно настроенный mongod.confфайл в моем случае. Также может быть, что права доступа к новому каталогу установлены неправильно. chown -R mongod:mongod <directory name>было то, как я обеспечил доступ (и, конечно, chmod 600 <dir>также). Наконец, запустите, ls -Zчтобы убедиться, что контекст правильный. Я просто сравнил каталог по умолчанию, который работал для меня.

Если это еще не решено, пожалуйста, покажите также содержимое вашего файла журнала. Там могут быть некоторые подсказки.


4

В продолжение сказанного @mustaccio ответом для меня стал контекст SELinux для нового logpathи dbpath. Я выполнил следующие команды, и все было хорошо:

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

(это было на RHEL 7.1 кстати)


4

У меня было это на Raspberry Pi, а также на моем сервере Ubuntu.

«Работа для mongod.service не удалась. Подробности смотрите в «systemctl status mongod.service» и «journalctl -xn».

У меня была эта проблема в разных случаях по разным причинам:

  1. Файл с неправильным именем .conf - скрипт mongodb (в который я переместился /etc/init.d/mongodb), строка 57, CONF=/etc/mongod.confкогда мой файл был /etc/mongodb.conf. Изменение строки 57 исправило это. Кроме того, я мог бы изменить имя сценария точно так же.

  2. Файл mongod.lock - в последний раз, когда mongod останавливался, у него не было возможности закрыть базу данных. Это оставляет файл в папке вашей базы данных с именем mongod.lock. Внутри папки находится номер (я полагаю, это PID, который Монго использовал последним). Если этот файл существует, вы не сможете запустить службу mongod. Удалите файл и попробуйте снова.

  3. Пользователь mongo - мне нужно было создать пользователя linux, который бы отвечал за запуск и запуск mongod.service. Я назвал мое монго и обновил свой /etc/init.d/mongodbсценарий, строка 95 для меня, чтобы сказать DAEMONUSER=${DAEMONUSER:-mongo}. Это, конечно, будет работать только в том случае, если вы создали нового пользователя с именем mongo (или, как вы думаете, все, что вы хотите).

  4. Разрешения БД - это популярный. После того, как вы объявите, где будет расположена папка базы данных, вы должны убедиться, что ваш пользователь 'mongo' владеет этим файлом. Например, моя база данных хранится в /data/db. Я запустил следующую команду:
    sudo chown –R mongo:mongo /data
    и это перешло во владение пользователя /dataи всех его подкаталогов пользователю монго.

  5. Неправильный сервис - этот был немного смущающим для меня. Я пытался начать mongoкак службу вместо mongod. 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, до собственных репозиториев Mongos. По сути, обновление с V2 до V3.

Оказывается, для репозитория centos 7 требуется пользователь mongodb , а для собственного репозитория mongos - пользователь mongod.

В конце концов, это был файл журнала, который все еще существовал из старой установки, в которую новая установка не могла записать, так как имена пользователей были разными, и я не заметил.


1

В моей системе (Fedora) у меня есть "/ var / log" на tmpfs (ram), си каждый раз, когда я перезагружаю все на этом разделе, теряется. Многие люди к этому, потому что они имеют SSD-накопители и хотят уменьшить количество операций ввода-вывода (экономя время жизни накопителя).

Решением является создание каталога / 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 Server 2016. Все еще не могу перезапустить службу после изменения пути к файлу журнала, все еще получая ошибка: «Служба не отвечает на функцию контроля». Любая идея, пожалуйста?
Эдди Кумар,

0

Остановить сервер MongoDB:

service mongod stop

Скопируйте каталог Монго в новый каталог:

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.