Дата поста: 21-05-2013
Недавно дома отключили 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
После этого сервер спокойно стартует.