MongoDB 데이터 저장소 디렉토리 변경


184

지금까지는 MongoDB 데이터 디렉토리를 지정하지 않았으며 30GB 기본 파티션이 하나만있었습니다.

공간이 부족하고 새 하드 디스크를 추가했습니다. /var/lib/mongodb/기존 설치에 영향을주지 않고 새 디스크에서 모든 것이 실행되도록 데이터를 전송 하고 MongoDB를 구성하려면 어떻게해야합니까?


또한 새 마운트 지점에 대한 권한이 r + x인지 확인해야합니다 ( sudo chmod o+rx /media예 : 마운트 지점이 인 경우) media. r + x는 첫 번째 마운트 지점에서 '다른'그룹 및 사용자가 사용할 수 있어야합니다.
wordsforthewise

답변:


219

짧은 대답은 --dbpathMongoDB 의 매개 변수를 사용하여 MongoDB가 데이터를 읽고 쓰는 디렉토리를 제어 할 수 있다는 것입니다.

mongod --dbpath / usr / local / mongodb-data

mongodb를 시작하고 파일을에 넣습니다 /usr/local/mongodb-data.

배포 및 MongoDB 설치에 따라이 작업을 mongod.conf자동으로 수행 하도록 파일을 구성 할 수도 있습니다 .

# Store data in /usr/local/var/mongodb instead of the default /data/db
dbpath = /usr/local/var/mongodb

공식 10gen Linux 패키지 ( Ubuntu / Debian 또는 CentOS / Fedora )는에 배치 된 기본 구성 파일과 함께 /etc/mongodb.conf제공되며 MongoDB 서비스는 시작할 때이를 읽습니다. 여기서 변경할 수 있습니다.


9
내 데비안은하지 mongod.conf 그것의 mongodb.conf 상자
UpTheCreek

12
/etc/mongodb.conf이 솔루션마다 업데이트했습니다 . 그런 다음 시작 후 사용 된 mongod것을 보았습니다 /data/db. mongodb.conf 업데이트가 mongod가 DB를 저장 한 위치에 영향을 미치지 않은 이유는 무엇입니까? ( --dbpath논쟁 을 사용하여 작동합니다.
Kevin Meredith

내 Fedora 상자에서 그것은 /etc/mongodb.conf업데이트되어 저에게 잘 작동합니다.
tuxdna

4
chown서비스 시작 스크립트를 위해 새 데이터 디렉토리를 mongod 사용자에게 제공해야합니다.
피트 가라 파노

어떻게 chown을합니까?
chovy

102

다운 타임으로 2 분 안에 해결 :)
폴더를 이동하고 symlink를 추가 한 다음 권한을 조정하십시오.

sudo service mongod stop
sudo mv mongodb /new/disk/mongodb/
sudo ln -s /new/disk/mongodb/ /var/lib/mongodb
sudo chown mongodb:mongodb /new/disk/mongodb/
sudo service mongod start

# test if mongodb user can access new location:
sudo -u mongodb -s cd /new/disk/mongodb/
# resolve other permissions issues if necessary
sudo usermod -a -G <newdisk_grp> mongodb

3
나는 이것이 대답이어야한다고 생각합니다. 나는 항상 상징적 인 링크가 매우 훌륭한 솔루션이라는 것을 알고 있으며 구성 변경 등을 통해 이들을 사용하는 솔루션을 홍보합니다.
guy mograbi

아마 usermod 필요가 없습니다. dbpath의 트리에서 "다른"사용자에 대한 + x 실행 권한이 없습니다 chmod -R o+x /<home>. 참조 : stackoverflow.com/a/38193187/205049
oori

이 지침을 따릅니다 (다른 디스크에서 dbpath 사용). 여전히 Permission denied: "/var/lib/mongodb"다음과 같이 나타납니다. /home/../mongodb/mongodb/의 모습 : drwxrwxr-x 3 mongodb mongodb 4096 oct 13 09:32 ../ drwxr-xr-x 2 mongodb nogroup 4096 oct 13 09:29 journal/ -rw------x 1 mongodb nogroup 67108864 sep 23 14:44 local.0* -rw------x 1 mongodb nogroup 16777216 sep 23 14:44 local.ns* -rwxr-xr-x 1 mongodb mongodb 0 oct 13 09:29 mongod.lock*
Machinerium

1
당신이 실행시에 폴더 무엇을하는 곳으로 필요의 설명 mv은 lib 디렉토리 내에서 MV 명령을 실행하면 명령을, 더 이상에 MongoDB를이 없습니다 ln
앤디

1
솔루션을 시도했지만 응용 프로그램을 다시 시작하면 다음 오류가 발생합니다. var에 / lib 디렉토리 / 몽고 : 부스트 : : 파일 시스템 :: 상태 : 사용 권한이 거부되었습니다 "/var/lib/mongo/mongod.lock"을, 종료
아룬 차우

33

기본 경로를 변경하려는 경우 다음 명령이 적합합니다. mongodb의 bin 디렉토리에 이것을 입력하십시오.

mongod --dbpath=yourdirectory\data\db

기존 데이터를 이동하려는 경우 명령을 실행하기 전에 기존 data \ db 디렉토리의 모든 폴더를 새 디렉토리로 복사하십시오.

또한 실행중인 기존 mongodb 서비스를 중지하십시오.


1
이것은 Linux에서도 작동합니다. mondod 스크립트 옆에 "data"라는 디렉토리를 만들고 다음과 같이 실행합니다. ./mongod --dbpath = data
cagdasalagoz

29

없는 경우 MongoDB 폴더에 mongod.cfg라는 파일을 작성하십시오. 제 경우에는 : C : \ Users \ ivanbtrujillo \ MongoDB

그런 다음 메모장을 사용하여 mongod.cfg를 편집하고 다음 (사용자 정의 dbpath)이있는 행을 추가하십시오.

dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

이 파일에서 로그 경로도 지정해야합니다. 내 mongod.cfg 파일은 다음과 같습니다.

logpath=C:\Users\ivanbtrujillo\MongoDB\log\mongo.log
dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

mongoDB를 Windows 서비스로 사용하는 경우이 키를 변경하고 mongod.cfg 파일을 지정해야합니다.

mongodb를 Windows 서비스로 설치하려면 다음 명령을 실행하십시오.

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" install**

regedit.exe를 열고 다음 경로로 이동하십시오.

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB

MongoDB 서비스가 작동하지 않으므로 ImagePath 키를 편집하고 내용을 삭제하고 다음을 입력해야합니다.

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" 
--logpath="C:\Users\ivanbtrujillo\MongoDB\log\mongo.log" service**

우리는 구성 파일과 해당 로그 경로를 mongo에 표시합니다.

그런 다음 mongodb 서비스를 초기화하면 작동합니다.

다음은 Windows에서 mongoDB를 설치하는 전체 자습서입니다. http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

도움이 되길 바랍니다.


1
MongoDB 2.6 이상은 YAML 구성 파일을 사용합니다. 이전 형식은 여전히 ​​이전 버전과의 호환성을 위해 지원되지만 새 형식을 사용할 수 있습니다. 자세한 내용은 여기를 참조하십시오 .
gronostaj

dbpath 변수는 Linux에도 존재합니다. /etc/mongod.conf를보십시오.
xpros

23

의 내용을 /var/lib/mongodb에 복사하십시오 /data/db. 같은 당신이 찾고해야하는 파일은 이름을 가지고 있어야 your_db_name.ns하고 your_dbname.n어디에 n당신이 아래에 이러한 파일이 표시되지 않는 경우 0으로 시작하는 숫자입니다 /var/lib/mongodb귀하의 파일 시스템에서 검색이.

복사 한 후에 --dbpath=/data/dbmongod명령을 통해 MongoDB를 시작할 때 사용 하십시오 .


서버를 다시 시작할 때마다 이것을 수행하는 방법이 있습니까?
user4951

1
@JimThio이 스위치를 mongodb를 시작하는 쉘 스크립트에 추가 할 수 있습니다. 일반적으로 /etc/init.d/mongod 또는 /etc/init.d/mongodb입니다.
lobster1234

19

여기 내가 한 일이 있습니다. 다른 사람에게 도움이되기를 바랍니다.

단계 :

  1. mongodb를 사용하는 서비스중지하십시오
  2. mongod 중지 -내 rc 파일 /etc/rc.d/rc.mongod stop을 사용하는 방법은 systemd와 같은 다른 것을 사용하는 경우 문서를 확인하는 방법을 확인해야합니다
  3. 새로운 하드 디스크에 새 디렉토리만듭니다 -mkdir /mnt/database
  4. mongodb가 해당 디렉토리 (보통 chown mongodb:mongodb -R /mnt/database/mongodb) 에서 읽기 / 쓰기 권한을 가지고 있는지 확인하십시오 . @DanailGabenski 덕분입니다.
  5. 새 위치로 MongoDB를의 데이터 폴더를 복사 -cp -R /var/lib/mongodb/ /mnt/database/
  6. 기존 데이터베이스 폴더를 제거합니다 -rm -rf /var/lib/mongodb/
  7. 새 데이터베이스 폴더에 대한 심볼릭 링크 만들기 -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. mongod 시작 -/etc/rc.d/rc.mongod start
  9. 당신의 mongod 의 로그확인하고 위생 검사 mongo를 수행하십시오 (모든 것이 괜찮은지 확인하려면 데이터베이스에 연결하십시오)
  10. 1 단계에서 중지 한 서비스시작하십시오.

이 작업을 할 때 특히 조심해야한다고 말할 필요는 없지만, rm -rf이것이 최선의 방법이라고 생각합니다.

mongod가 실행되는 동안 데이터베이스 디렉토리를 복사하려고 시도해서는 안됩니다. 데이터베이스의 내용을 변경하는 서비스가 쓰기 / 읽기 서비스가있을 수 있기 때문입니다.


1
오래된 대답이지만 부분적으로 효과가있었습니다. 또한 mongodb 사용자가 작동하려면 새 디렉토리와 symlik을 소유해야합니다. chown mongodb:mongodb -R /mnt/database/mongodb
Danail Gabenski

3
5 번 지점에서 cp -rp / var / lib / mongodb / / mnt / database /와 같은 명령을 작성하십시오. 그러면 폴더의 소유권과 권한이 그대로 유지됩니다.
Ketan Ghumatkar

솔루션을 시도했지만 응용 프로그램을 다시 시작하면 다음 오류가 발생합니다. var에 / lib 디렉토리 / 몽고 : 부스트 : : 파일 시스템 :: 상태 : 사용 권한이 거부되었습니다 "/var/lib/mongo/mongod.lock"을, 종료
아룬 차우

10

apt-getUbuntu 12.04 를 통해 설치 한 경우 잊지 마십시오 chown -R mongodb:nogroup /path/to/new/directory. 또한에서 구성을 변경하십시오 /etc/mongodb.conf.

다시 말해, mongodb-10gen패키지는 이제 upstart를 통해 시작되므로 구성 스크립트는/etc/init/mongodb.conf

방금이 과정을 거쳤습니다 .Google 직원이 유용하다고 생각하기를 바랍니다. :)


1

나를 위해, 사용자는 mongod대신mongodb

sudo chown mongod:mongod /newlocation

서비스가 실패하면 오류에 대한 로그를 볼 수 있습니다.

/var/log/mongodb/mongod.log


0

debian / ubuntu에서 /etc/init.d/mongodb 스크립트를 편집해야합니다. 실제로이 파일은 /etc/mongodb.conf에서 설정을 가져와야하지만 기본 디렉토리 (아마도 버그)를 가져 오지 않는 것 같습니다.

이것은 약간의 해킹이지만 스크립트에 추가하면 올바르게 시작됩니다.

더하다:

DBDIR=/database/mongodb

변화:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"}

에:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}

루트 대신 데이터베이스를 홈 디렉토리에 저장하려면 어떻게해야합니까?
JesseBoyd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.