MongoDB : initAndListen 예외 : 20 읽기 전용 디렉토리에 잠금 파일을 작성하려고 시도했습니다 : / data / db, 종료


146

나는 /data/db루트 디렉토리에서 만들고 다음을 실행했다 ./mongod.

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] now exiting
[initandlisten] shutting down with code:100

4
권한 문제처럼 보입니다. mongod를 실행하는 사용자에게 / data / db 디렉토리에 쓸 수있는 권한이 있습니까? 의 출력을 공유 ls -ld /data/db하고 id우리는 조언을 할 수 있습니다.
Bjorn Roche

drwxr-xr-x 2 루트 루트 4096
whinytween96

uid = 1000 (사용자) gid = 1000 (사용자) groups = 1000 (사용자), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween96

@BjornRoche -ld부분에 감사드립니다 :)
Skynet

@BjornRoche 내 출력은 drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/db여전히 오류가 발생합니다. 어떤 아이디어?
Blake

답변:


278

문제는 생성 한 디렉토리 /data/db가 소유하고 루트 사용자 만 쓸 수 있지만 mongod를 자신으로 실행한다는 것입니다. 이를 해결하는 방법에는 여러 가지가 있지만 궁극적으로 문제의 디렉토리에 올바른 권한을 부여해야합니다. 이것이 프로덕션 용인 경우 문서를 확인하고 신중하게 생각하는 것이 좋습니다. 아마도 특별한주의를 기울이고 싶습니다.

그러나 이것이 테스트를위한 것이며 작업하고이를 수행하기 위해 이것이 필요한 경우,이를 시도하여 모든 사람이 디렉토리를 쓸 수있게 할 수 있습니다.

> sudo chmod -R go+w /data/db

또는 이것으로 디렉토리를 소유하게됩니다.

> sudo chown -R $USER /data/db

4
누군가가 내부의 -R모든 /data/db파일을 재귀 적 으로 변경 해야 할 수도 있다고 생각 합니다.
YongHao Hu

2
고마워 그것을 시도하고 여전히 같은 오류가 발생
Samuel Dare

1
이 주제는 이미 조금 오래되었지만 나를 chmod위해 새로운 오류 를 생성 initAndListen : operation not permitted했지만 chown작동했습니다.
bachinblack

chown도 나를 위해 그것을했다
dwagnerkc

디렉토리에 777 umask를 제공하는 것은 나쁜 습관입니다. 755를 설정할 수 있으며 작동합니다chmod -R 755 /data/db
Juan-Kabbali


25

시스템이 SELinux를 사용하는 경우, 작성한 디렉토리에 올바른 컨텍스트를 사용해야합니다.

ls -dZ /data/db/
ls -dZ /var/lib/mongo/

다음을 사용하여 컨텍스트를 복제하십시오.

chcon -R --reference=/var/lib/mongo /data/db

1
당신은 내 하루를 구했다! 감사합니다
Keerthivasan

2
몽고의 이후 버전에 대한 ls -dZ / var / lib / mongodb /
espeed

17

나는 같은 문제를 겪었고 다음 해결책 으로이 문제를 해결했습니다. 다음 해결책을 시도해야합니다.

sudo mkdir -p / data / db
sudo chown -R '사용자 이름'/ data / db


9

여기에 이미지 설명을 입력하십시오먼저 모든 mongoDB 서비스를 중지 한 다음에 디렉토리를 작성하십시오. 디렉토리 /가 없으면 루트를 의미하고 포트 파일도 제거하십시오. 해당 디렉토리에 대한 모든 권한을 부여하고 해당 디렉토리 소유자가되어 아래 명령을 실행하십시오.

sudo service mongod stop
sudo rm -rf /tmp/mongod*
sudo mkdir -p /data/db
sudo chmod -R a+wxr /data
sudo chown -R $USER:$USER /data

이제 MongoDB 서비스를 시작하면 도움이되지 않으면 다음과 같이 포트를 변경하십시오.

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018

참고 : 이 모든 것이 작동하고 희망이 당신을 위해 작동 할 것입니다.


5

/data/db(또는 /var/lib/mongodb) 의 권한을 수정하십시오 .

sudo chown -R mongodb: /data/db

그런 다음 MongoDB를 다시 시작하십시오.

sudo systemctl restart mongod

도움이되지 않으면 / var / lib / mongodb와 다른 데이터 디렉토리를 사용하는 경우 오류 메시지를 확인하십시오. 이 경우에는

sudo chown -R mongodb: <insert your data directory here>

출처


4

좋은 해결책이지만 왜 아무도 Windows 용 솔루션을 제공하지 않는지 궁금합니다.

창을 사용하는 경우 cmd를 "관리자 권한으로 실행"하면됩니다.


6
사람들이 일반적으로 Windows에서 데이터베이스 서버를 실행하지 않기 때문이라고 생각합니다.
Blake

1
또한 데이터베이스를 관리자 / 루트로 실행하는 것은 좋지 않습니다. 자세한 내용은 여기 와 같은 다른 주석을 확인 하십시오.
Nino Filiu

4

mongodb 로그를 확인하고 이러한 오류가 발생하면 단계를 따르십시오. /data/db디렉토리의 권한 문제로 인해 발생합니다 . ubuntu16.04를 사용하고 있으며 다음과 같이 두 가지 간단한 명령을 실행하는 솔루션을 찾습니다.

1 단계 : / data / db 디렉토리에 권한을 부여하십시오.

sudo chmod -R 0777 /data/db

2 단계 : 다음 과 같이 mongod 서비스를 시작하십시오.

sudo service mongod start

3 단계 : mongod 서비스 상태 확인 :

sudo service mongod status

2
1 단계는 모든 사용자에게 읽기 / 쓰기 / 실행 권한을 부여합니다. 사용해서는 안됩니다.
조나스 프란츠

의견을 보내 주셔서 감사합니다. @JonasFranz,이 경우 프로덕션 서버에 대해 0755 권한을 사용할 수 있습니다. 내가 틀렸다면 정정 해주세요.
Jitendra

3

루트에 데이터베이스 디렉토리가 필요하지 않은 경우 data/db홈 디렉토리 ( mkdir -p ~/data/db) 에서 작성할 수 있습니다 .

그런 다음 --dbpath옵션을 사용 하여 MongoDB 서버를 시작할 수 있습니다 .

mongod --dbpath=$(echo ~)/data/db

(이것은 터미널에서 시작한다고 가정합니다. 이상한 이유로 mongod~를 홈 디렉토리 경로로 허용하지 않으므로 bash echo replacement trickery를 쓰십시오./home/yourusername/data/db )

사실, 그럴 필요는 없으며 ~/data/db, 원하는 곳이면 어디든지 될 수 있으며이 방법으로 여러 데이터베이스 경로를 가지고 모든 것을 멋지게 정리할 수 있습니다. 프로덕션에 가장 적합한 옵션이 아닐 수 있지만 (원하는 작업에 따라 다름) 제대로 개발하는 데 적합합니다.


3

나는 같은 문제를 다루었 다.

디렉토리가 포함 된 MongoDB 디렉토리로 변경 bin하고 다음을 실행하십시오.

sudo bin/mongod 

루트 사용자로 MongoDB를 실행하면 루트 비밀번호를 입력하라는 메시지가 표시 될 수 있습니다. 여전히 MongoDB를 실행할 수 없으면 MongoDB의 데이터 디렉토리에 대한 권한을 확인하십시오. 시작하다:

ls -ld /data

또는 ls -l /디렉토리를 포함한 디렉토리의 모든 디렉토리 및 파일에 대한 권한을 입력 하십시오 /data.

루트 사용자의 권한 모드는 " rwx" 이어야합니다 . 즉, 루트 사용자는 파일을 읽고 쓰고 실행할 수 있습니다. 이를 위해 다음을 사용합니다.

chmod 755 /data 

755/data디렉토리 의 권한 을 " 로 설정하는 8 진 표기법입니다.rwxr-xr-x " 루트 사용자는 읽고 쓰고 실행할 수 있지만 "그룹"과 "모두"는 읽기만 실행할 수 있습니다.

참고 :이 작업을 수행 할 수 없으면 대신 다음을 입력하십시오.

sudo chmod 755 /data   

권한을 루트 사용자로 설정합니다.

그런 다음 해당 단계를 완료하면 다음을 사용하여 권한 모드를 다시 캡처하십시오.

ls -ld /data

다음과 같아야합니다.

drwxr-xr-x  3 root  wheel  102 Mar  3 17:00 /data

d처음에 " "에 대해 걱정할 필요가 없으며 권한에 " rwxr-xr-x"이 (가) 반영되어 있습니다.

이제 MongoDB 디렉토리로 다시 변경하고 다음을 입력하십시오.

sudo bin/mongod  

MongoDB를 실행합니다.


2
나쁜 생각, 절대 sudo로 실행하지 마십시오. 배포판에 따라 사용자 / 그룹을 mongod 또는 mongodb로 관리하는 더 나은 솔루션이 있습니다. 이 솔루션을 사용하지 마십시오.
Andy

2

수퍼 유저 권한으로 명령을 실행하면됩니다.

터미널에서 입력하십시오 : sudo su mongod


1
수퍼 유저로서 이와 같은 프로그램을 실행하는 것은 항상 나쁜 생각입니다. 폴더의 권한을 수정하는 것이 좋습니다
Jason


-1

이것은 Ubuntu LTS 20.04에서 나를 위해 일했습니다.

$ sudo service mongod start

1
왜 다른 사람들에게도 효과가 있다고 생각하는지 설명하십시오!
sauhardnc

1
실제 이유를 설명하고, 작업 코드 스 니펫을 추가하고, 문제를 제거하기 위해 수행 할 단계를 추가하는 등의 통찰력으로 해결 방법을 자세히 설명하십시오. 자세한 내용은 StackOverflow의 지침을 참조하십시오.
Kapil Raghuwanshi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.