sourcecode

서버 크래시 후 MongoDB가 시작되지 않음

copyscript 2023. 2. 15. 22:09
반응형

서버 크래시 후 MongoDB가 시작되지 않음

Ubuntu 컴퓨터가 고장나서 재부팅했을 때 MongoDB가 작동하지 않았습니다.다음 명령을 실행해 보니 다음과 같은 출력이 나왔습니다.

$ mongo
Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

$ service mongodb status
mongodb stop/waiting

$ service mongodb restart
stop: Unknown instance: 
start: Rejected send message, 1 matched rules; type="method_call",
       sender=":1.57" (uid=1000 pid=2227 comm="start mongodb ")
       interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)"
       requested_reply="0"
       destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

$ tail /var/log/mongodb/mongodb.log
[initandlisten] exception in initAndListen: 12596 old lock file, terminating
dbexit: 
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] shutdown: going to close sockets...
[initandlisten] shutdown: waiting for fs preallocator...
[initandlisten] shutdown: closing all files...
[initandlisten] closeAllFiles() finished
dbexit: really exiting now

(웹 사이트 레이아웃에 맞게 출력이 다시 포맷되었습니다.)

무슨 일입니까?어떻게 하면 고칠 수 있죠?

로그 파일에 "오래된 잠금 파일"이 있음을 알 수 있습니다.MongoDB는 실행 중에 잠금 파일을 보관합니다.이 파일은 시작할 때 생성되고 중지될 때 삭제됩니다.컴퓨터가 크래쉬 했을 때(또는 MongoDB 크래쉬 했을 때 등kill이 파일은 삭제되지 않기 때문에 데이터베이스가 시작되지 않습니다.이 파일의 존재는 MongoDB의 부정한 셧다운을 나타냅니다.

다음 두 가지 작업을 수행할 수 있습니다.

  1. 개발 기계이며 데이터베이스를 사용하지 않은 경우(및 프로그램도 사용하지 않은 경우) 파일을 수동으로 삭제할 수 있습니다.Ubuntu 12.10에서 실행되는 MongoDB 2.2.2의 경우,/var/lib/mongodb/mongod.lock다른 버전에서는 파일이 다른 경로에 있거나 이름이 지정될 수 있습니다.mongo.lock.

  2. 보다 안전한 방법은 MongoDB의 내구성수리 가이드를 따르는 것입니다.요약하면, 상기의 설정을 가지는 머신에서는, 다음의 커맨드를 실행할 필요가 있습니다.

    sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
    sudo service mongod start
    

내가 해야 할 일은 뛰는 것뿐이었다: sudo mongod -- 수리

그 후, 다음과 같이 합니다.

스도몽고드

지금까지의 경험을 바탕으로 데이터베이스 폴더 내에 있는 "mongod.lock" 파일을 삭제합니다.내 경우:

* Ubuntu에서 데이터베이스가 설치되어 있는 곳을 참조합니다.data. (cd data) folder. (ls) 파일 목록 표시 * 데이터베이스 크래시 시 자동으로 생성된 "mongod.lock" 파일을 "rm mongod.lock" 파일로 삭제합니다.

그 후 ".mongod"를 발행하여 mongo deamon을 기동하거나 mongo를 발행하여 mongo shell을 기동합니다.모든 게 잘 될 거야

서버에 사용 가능한 공간이 충분한지 확인합니다.자리가 없으면 mongodb가 시작되지 않습니다.

Bluepill이나 Monit 의 모니터링 툴을 사용하지 않은 경우 이 문제에 직면해야 합니다.어떤 이유로 인해 서버가 크래쉬한 후 mongo가 데몬을 자동으로 시작하지 않으면 수동으로 작동시켜야 하기 때문입니다.sudo service mongod restart이 문제를 이해했습니다만, 몇 가지 작업이 더 필요합니다.dbpath를 확인해 주세요./etc/mongod.conf daemonmongo daemon을 에.

저는요.

storage:
  dbPath: /var/lib/mongodb

mongodMongoDB starting : pid=10795 port=27017 dbpath=/data/db 64-bit host=xyz.com가 /confdbpath /etc/mongod.conf에된 것과 합니다.

, 라고 입력해 주세요.sudo mongod --dbpath /var/lib/mongodb에 런음음음 and를 사용하다mongoddbpath mongo mongo opathpath 。

참고로 mongo 프로세스를 시작합니다.mongod

이것이 최선의 해결책은 아닐지도 모르지만, 만약 당신이 절박하다면 이것을 시도해 볼 수 있다.저널만 문제인 것 같아서 다음 절차를 밟았습니다.

  1. 새 데이터 디렉토리를 만듭니다./var/lib/mongodb2일 수 있습니다.
  2. mongod.conf를 업데이트하여 새 데이터 dir를 가리킵니다.
  3. mongoDB를 기동합니다.
  4. 정상적으로 기동하면, 다시 mongo셧다운 해 속행할 수 있습니다.그 이외의 경우는, 여기서 읽기를 정지할 수 있습니다.
  5. 이전 데이터 디렉토리를 찾아 데이터베이스 파일을 새 데이터 디렉토리에 복사합니다(예: admin.0 admin.1 admin.ns 등).
  6. mongoDB를 다시 시작합니다(새 데이터 디렉토리를 계속 사용).

이 절차를 완료(5분 이내에 완료)한 후 실행 중이었고 모든 데이터는 정상으로 나타났습니다.

감사합니다.또, MongoDB가 재기동해, 낡은파일에 대해 불평하는 문제도 있었습니다.Windows 서비스 리스트에서 MongoDB를 정지하고 나서mongod.lock그 후, MongoDB 서비스를 올바르게 기동할 수 있었고, 정상적으로 동작했습니다.

「」의 삭제".lock directory mongo dbpath잘 먹히네요.

: ★sudo sudo rm {data-directory}/mongod.lock

언급URL : https://stackoverflow.com/questions/13700261/mongodb-wont-start-after-server-crash

반응형