mongodb非正常关闭无法启动
刚刚接触mongodb,遇到了个小问题,网上查到的资料好像都不是很全,总结记录下,希望对大家有帮助。
一、问题描述
在重新配置mongodb的主从时,非正常关闭了数据库【kill mongod进程】,结果在重新启动时抛出错误如下
PS:正常应该是:mongod -f /mvnobss/users/mgousr01/mongodb/conf/master.conf --shutdown
mgousr01@test:/mvnobss/users/mgousr01/mongodb/bin>./start_mongodb.shabouttoforkchildprocess,waitinguntilserverisreadyforconnections.forkedprocess:30717ERROR:childprocessfailed,exitedwitherrornumber100
二、问题解决
查看日志:
2017-05-11T16:01:42.370+0800ICONTROL*****SERVERRESTARTED*****2017-05-11T16:01:42.404+0800IJOURNAL[initandlisten]journaldir=/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal2017-05-11T16:01:42.404+0800IJOURNAL[initandlisten]recoverbegin2017-05-11T16:01:42.404+0800IJOURNAL[initandlisten]recoverlsn:757156372017-05-11T16:01:42.404+0800IJOURNAL[initandlisten]recover/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._232017-05-11T16:01:42.408+0800IJOURNAL[initandlisten]recoverskippingapplicationofsectionseq:59812763<lsn:757156372017-05-11T16:01:43.187+0800IJOURNAL[initandlisten]recoverskippingapplicationofsectionseq:59872073<lsn:757156372017-05-11T16:01:43.517+0800IJOURNAL[initandlisten]recover/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._242017-05-11T16:01:44.633+0800IJOURNAL[initandlisten]recover/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._252017-05-11T16:01:45.762+0800IJOURNAL[initandlisten]recover/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._262017-05-11T16:01:45.765+0800IJOURNAL[initandlisten]recoverskippingapplicationofsectionseq:60050033<lsn:757156372017-05-11T16:01:45.766+0800FJOURNAL[initandlisten]dbexceptionduringrecovery:15923couldn'tgetfilelengthwhenopeningmapping/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19boost::filesystem::file_size:Nosuchfileordirectory:"/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19"2017-05-11T16:01:45.766+0800ISTORAGE[initandlisten]exceptionininitAndListen:15923couldn'tgetfilelengthwhenopeningmapping/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19boost::filesystem::file_size:Nosuchfileordirectory:"/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19",terminating2017-05-11T16:01:45.766+0800ICONTROL[initandlisten]nowexiting2017-05-11T16:01:45.766+0800INETWORK[initandlisten]shutdown:goingtocloselisteningsockets...2017-05-11T16:01:45.767+0800INETWORK[initandlisten]shutdown:goingtoflushdiaglog...2017-05-11T16:01:45.767+0800INETWORK[initandlisten]shutdown:goingtoclosesockets...2017-05-11T16:01:45.767+0800ISTORAGE[initandlisten]shutdown:waitingforfspreallocator...2017-05-11T16:01:45.767+0800ISTORAGE[initandlisten]shutdown:finalcommit...2017-05-11T16:01:45.767+0800ISTORAGE[initandlisten]shutdown:closingallfiles...2017-05-11T16:01:45.767+0800ISTORAGE[initandlisten]closeAllFiles()finished2017-05-11T16:01:45.767+0800ICONTROL[initandlisten]dbexit:rc:100
日志说找不到/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19文件,这个是正常的,因为我停库之前备份数据库后删除了数据库,常规情况是可以启动起来的。
网上百度说是需要删除非正常关闭后产生的mongod.lock文件再去重新启动,好,删除来一遍:
mgousr01@test:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>lltotal20drwxrwxr-x3mgousr01mongodb40962015-10-1017:46admindrwxrwxr-x2mgousr01mongodb40962017-05-1111:12journaldrwxrwxr-x3mgousr01mongodb40962015-10-1017:43localdrwxrwxr-x3mgousr01mongodb40962017-05-1115:47lxvomgodb1-rwxrwxr-x1mgousr01mongodb02017-05-1116:02mongod.lock-rw-rw-r--1mgousr01mongodb692015-10-1017:09storage.bsonmgousr01@test:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>mgousr01@test:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>mgousr01@test:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>rm-rfmongod.lock
重新启动依旧报错,并且又生成了mongod.lock文件:
mgousr01@test:/mvnobss/users/mgousr01/mongodb/bin>./start_mongodb.shabouttoforkchildprocess,waitinguntilserverisreadyforconnections.forkedprocess:30717ERROR:childprocessfailed,exitedwitherrornumber100mgousr01@test:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>lltotal20drwxrwxr-x3mgousr01mongodb40962015-10-1017:46admindrwxrwxr-x2mgousr01mongodb40962017-05-1111:12journaldrwxrwxr-x3mgousr01mongodb40962015-10-1017:43localdrwxrwxr-x3mgousr01mongodb40962017-05-1115:47lxvomgodb1-rwxrwxr-x1mgousr01mongodb02017-05-1116:15mongod.lock
试过了很多遍还是不行,继续看日志:
2017-05-11T16:15:42.379+0800ICONTROL*****SERVERRESTARTED*****2017-05-11T16:15:42.413+0800ISTORAGE[initandlisten]**************2017-05-11T16:15:42.413+0800ISTORAGE[initandlisten]Error:journalfilesarepresentinjournaldirectory,yetstartingwithoutjournalingenabled.2017-05-11T16:15:42.413+0800ISTORAGE[initandlisten]Itisrecommendedthatyoustartwithjournalingenabledsothatrecoverymayoccur.2017-05-11T16:15:42.413+0800ISTORAGE[initandlisten]**************2017-05-11T16:15:42.413+0800ISTORAGE[initandlisten]exceptionininitAndListen:13597can'tstartwithout--journalenabledwhenjournal/filesarepresent,terminating2017-05-11T16:15:42.413+0800ICONTROL[initandlisten]dbexit:rc:100
journal文件目前存在在journal目录下,并且本次启动过程没有启动journaling,由于启动数据库时伴随启动了journaling所以才会抛出错误。
于是进到journal目录下,将非正常关闭时间点的journal文件删除:
mgousr01@test:/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal>ls-lrttotal3179664-rw-------1mgousr01mongodb10766909442017-05-1111:11j._23-rw-------1mgousr01mongodb10818764802017-05-1111:11j._24-rw-------1mgousr01mongodb10936565762017-05-1111:12j._25-rw-------1mgousr01mongodb37355522017-05-1115:38j._26-rw-------1mgousr01mongodb882017-05-1115:38lsnmgousr01@test:/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal>rm-rfj._26
启动成功:
mgousr01@test:/mvnobss/users/mgousr01/mongodb/bin>lltotal4-rwxrwxr-x1mgousr01mongodb602015-08-1117:44start_mongodb.shmgousr01@test:/mvnobss/users/mgousr01/mongodb/bin>./start_mongodb.shabouttoforkchildprocess,waitinguntilserverisreadyforconnections.forkedprocess:30927childprocessstartedsuccessfully,parentexiting
由于不是很懂这个文件目录的作用,网上查阅各种资料才知道,这个journal就是oracle 的redo log,MySQL的binlog,用于故障恢复的。
具体是怎样的运行机制还需要进一步研究。
我上面的环境是测试环境,不怕丢数据所以删除无所谓,生产环境应该要慎重。
【个人觉得,应该是可以在配置文件中指定disable journaling,然后去启动mongodb,启动成功后再enable重启数据库,还未尝试~】
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。