Недавно дома отключили 5 раз свет в течение 20 минут, в связи с чем домашний сервер бился в истерике, а поставить ИБП всё руки не доходят. В один прекрасный момент я заметил (спасибо MMS Agent) что мой MongoDB просто не запущен. Но при попытке запуска сервиса он выдавал мне ошибку, в логах я обнаружил кое что интересное, об этом и о том как это исправить читайте под катом

А проблема основная была в Permission denied, а в логе было что-то типа:

$ mongod
Fri Mar  8 22:54:46 [initandlisten] MongoDB starting : pid=13492 
    port=27017 dbpath=/data/db/ 64-bit host=Yongs-MacBook-Air.local
//...
Fri Mar  8 22:54:46 [initandlisten] journal dir=/data/db/journal
Fri Mar  8 22:54:46 [initandlisten] recover : no journal files present, no recovery needed
Fri Mar  8 22:54:46 [initandlisten] couldn't open /data/db/yourdb.ns errno:13 Permission denied
Fri Mar  8 22:54:46 [initandlisten] error couldn't open file /data/db/yourdb.ns terminating
Fri Mar  8 22:54:46 dbexit: 
Fri Mar  8 22:54:46 [initandlisten] shutdown: going to close listening sockets...
Fri Mar  8 22:54:46 [initandlisten] shutdown: going to flush diaglog...
Fri Mar  8 22:54:46 [initandlisten] shutdown: going to close sockets...
Fri Mar  8 22:54:46 [initandlisten] shutdown: waiting for fs preallocator...
Fri Mar  8 22:54:46 [initandlisten] shutdown: lock for final commit...
Fri Mar  8 22:54:46 [initandlisten] shutdown: final commit...
Fri Mar  8 22:54:46 [initandlisten] shutdown: closing all files...
Fri Mar  8 22:54:46 [initandlisten] closeAllFiles() finished
Fri Mar  8 22:54:46 [initandlisten] journalCleanup...
Fri Mar  8 22:54:46 [initandlisten] removeJournalFiles
Fri Mar  8 22:54:46 [initandlisten] shutdown: removing fs lock...
Fri Mar  8 22:54:46 dbexit: really exiting now

Самая важная строчка в этом логе оказалась:

couldn’t open /data/db/yourdb.ns errno:13 Permission denied Fri Mar 8 22:54:46 [initandlisten] error couldn’t open file /data/db/yourdb.ns terminating

Решение

Данная ошибка говорит о том, что наши файл принадлежат либо другому пользователю, либо на них стоят неверные права. Для того чтобы всё исправить давайте для начала перейдём в раздел с нашей базой данных (там где лежат файлы .ns). (Обычно это либо /data/db/ либо /var/lib/mongodb). И выполните следующую команду:

$ ls -ls /data/db
 
      0 drwxr-xr-x  2 mongodb  wheel          68 Mar  8 22:54 journal
 131072 -rw-------  1 root    wheel    67108864 Mar  7 17:01 yourdb.0
 262144 -rw-------  1 root    wheel   134217728 Mar  7 16:15 yourdb.1
  32768 -rw-------  1 root    wheel    16777216 Mar  7 17:01 yourdb.ns

Мы видим, что на нашу базу стоит пользователь рут, давайте это исправим, у меня за монгу отвечает юзер mongodb (КЭП отдыхает), выполните следующую команду:

$ sudo chown -R mongodb /data/db

Теперь нам необходимо проверить изменился ли владелец файлов:

$ ls -ls /data/db
 
      0 drwxr-xr-x  2 mongodb  wheel          68 Mar  8 22:54 journal
 131072 -rw-------  1 mongodb  wheel    67108864 Mar  7 17:01 yourdb.0
 262144 -rw-------  1 mongodb  wheel   134217728 Mar  7 16:15 yourdb.1
  32768 -rw-------  1 mongodb  wheel    16777216 Mar  7 17:01 yourdb.ns

Комментарии

comments powered by Disqus