mongodb非正常關閉無法啟動

來源:互聯網
上載者:User

標籤:mongodb

剛剛接觸mongodb,遇到了個小問題,網上查到的資料好像都不是很全,總結記錄下,希望對大家有協助。

一、問題描述

在重新設定mongodb的主從時,非正常關閉了資料庫【kill mongod進程】,結果在重新啟動時拋出錯誤如下

PS:正常應該是: mongod -f /mvnobss/users/mgousr01/mongodb/conf/master.conf --shutdown

[email protected]:/mvnobss/users/mgousr01/mongodb/bin>./start_mongodb.sh about to fork child process, waiting until server is ready for connections.forked process: 30717ERROR: child process failed, exited with error number 100

二、問題解決

查看日誌:

2017-05-11T16:01:42.370+0800 I CONTROL  ***** SERVER RESTARTED *****2017-05-11T16:01:42.404+0800 I JOURNAL  [initandlisten] journal dir=/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal2017-05-11T16:01:42.404+0800 I JOURNAL  [initandlisten] recover begin2017-05-11T16:01:42.404+0800 I JOURNAL  [initandlisten] recover lsn: 757156372017-05-11T16:01:42.404+0800 I JOURNAL  [initandlisten] recover /mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._232017-05-11T16:01:42.408+0800 I JOURNAL  [initandlisten] recover skipping application of section seq:59812763 < lsn:757156372017-05-11T16:01:43.187+0800 I JOURNAL  [initandlisten] recover skipping application of section seq:59872073 < lsn:757156372017-05-11T16:01:43.517+0800 I JOURNAL  [initandlisten] recover /mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._242017-05-11T16:01:44.633+0800 I JOURNAL  [initandlisten] recover /mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._252017-05-11T16:01:45.762+0800 I JOURNAL  [initandlisten] recover /mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal/j._262017-05-11T16:01:45.765+0800 I JOURNAL  [initandlisten] recover skipping application of section seq:60050033 < lsn:757156372017-05-11T16:01:45.766+0800 F JOURNAL  [initandlisten] dbexception during recovery: 15923 couldn‘t get file length when opening mapping /mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19 boost::filesystem::file_size: No such file or directory: "/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19"2017-05-11T16:01:45.766+0800 I STORAGE  [initandlisten] exception in initAndListen: 15923 couldn‘t get file length when opening mapping /mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19 boost::filesystem::file_size: No such file or directory: "/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19", terminating2017-05-11T16:01:45.766+0800 I CONTROL  [initandlisten] now exiting2017-05-11T16:01:45.766+0800 I NETWORK  [initandlisten] shutdown: going to close listening sockets...2017-05-11T16:01:45.767+0800 I NETWORK  [initandlisten] shutdown: going to flush diaglog...2017-05-11T16:01:45.767+0800 I NETWORK  [initandlisten] shutdown: going to close sockets...2017-05-11T16:01:45.767+0800 I STORAGE  [initandlisten] shutdown: waiting for fs preallocator...2017-05-11T16:01:45.767+0800 I STORAGE  [initandlisten] shutdown: final commit...2017-05-11T16:01:45.767+0800 I STORAGE  [initandlisten] shutdown: closing all files...2017-05-11T16:01:45.767+0800 I STORAGE  [initandlisten] closeAllFiles() finished2017-05-11T16:01:45.767+0800 I CONTROL  [initandlisten] dbexit:  rc: 100

日誌說找不到/mvnobss/users/mgousr01/mongodb/dbdata/rs0/lxvomgodb1/lxvomgodb1.19檔案,這個是正常的,因為我停庫之前備份資料庫後刪除了資料庫,常規情況是可以啟動起來的。

網上百度說是需要刪除非正常關閉後產生的mongod.lock檔案再去重新啟動,好,刪除來一遍:

[email protected]:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>lltotal 20drwxrwxr-x 3 mgousr01 mongodb 4096 2015-10-10 17:46 admindrwxrwxr-x 2 mgousr01 mongodb 4096 2017-05-11 11:12 journaldrwxrwxr-x 3 mgousr01 mongodb 4096 2015-10-10 17:43 localdrwxrwxr-x 3 mgousr01 mongodb 4096 2017-05-11 15:47 lxvomgodb1-rwxrwxr-x 1 mgousr01 mongodb    0 2017-05-11 16:02 mongod.lock-rw-rw-r-- 1 mgousr01 mongodb   69 2015-10-10 17:09 storage.bson[email protected]:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>[email protected]:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>[email protected]:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>rm -rf mongod.lock

重新啟動依舊報錯,並且又產生了mongod.lock檔案:

[email protected]:/mvnobss/users/mgousr01/mongodb/bin>./start_mongodb.sh about to fork child process, waiting until server is ready for connections.forked process: 30717ERROR: child process failed, exited with error number 100[email protected]:/mvnobss/users/mgousr01/mongodb/dbdata/rs0>lltotal 20drwxrwxr-x 3 mgousr01 mongodb 4096 2015-10-10 17:46 admindrwxrwxr-x 2 mgousr01 mongodb 4096 2017-05-11 11:12 journaldrwxrwxr-x 3 mgousr01 mongodb 4096 2015-10-10 17:43 localdrwxrwxr-x 3 mgousr01 mongodb 4096 2017-05-11 15:47 lxvomgodb1-rwxrwxr-x 1 mgousr01 mongodb    0 2017-05-11 16:15 mongod.lock

試過了很多遍還是不行,繼續看日誌:

2017-05-11T16:15:42.379+0800 I CONTROL  ***** SERVER RESTARTED *****2017-05-11T16:15:42.413+0800 I STORAGE  [initandlisten] **************2017-05-11T16:15:42.413+0800 I STORAGE  [initandlisten] Error: journal files are present in journal directory, yet starting without journaling enabled.2017-05-11T16:15:42.413+0800 I STORAGE  [initandlisten] It is recommended that you start with journaling enabled so that recovery may occur.2017-05-11T16:15:42.413+0800 I STORAGE  [initandlisten] **************2017-05-11T16:15:42.413+0800 I STORAGE  [initandlisten] exception in initAndListen: 13597 can‘t start without --journal enabled when journal/ files are present, terminating2017-05-11T16:15:42.413+0800 I CONTROL  [initandlisten] dbexit:  rc: 100

journal檔案目前存在在journal目錄下,並且本次啟動過程沒有啟動journaling,由於啟動資料庫時伴隨啟動了journaling所以才會拋出錯誤。

於是進到journal目錄下,將非正常關閉時間點的journal檔案刪除:

[email protected]:/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal>ls -lrttotal 3179664-rw------- 1 mgousr01 mongodb 1076690944 2017-05-11 11:11 j._23-rw------- 1 mgousr01 mongodb 1081876480 2017-05-11 11:11 j._24-rw------- 1 mgousr01 mongodb 1093656576 2017-05-11 11:12 j._25-rw------- 1 mgousr01 mongodb    3735552 2017-05-11 15:38 j._26-rw------- 1 mgousr01 mongodb         88 2017-05-11 15:38 lsn[email protected]:/mvnobss/users/mgousr01/mongodb/dbdata/rs0/journal>rm -rf j._26

啟動成功:

[email protected]:/mvnobss/users/mgousr01/mongodb/bin>lltotal 4-rwxrwxr-x 1 mgousr01 mongodb 60 2015-08-11 17:44 start_mongodb.sh[email protected]:/mvnobss/users/mgousr01/mongodb/bin>./start_mongodb.sh about to fork child process, waiting until server is ready for connections.forked process: 30927child process started successfully, parent exiting

由於不是很懂這個檔案目錄的作用,網上查閱各種資料才知道,這個journal就是oracle 的redo log,MySQL的binlog,用於故障恢複的。

具體是怎樣的運行機制還需要進一步研究。

我上面的環境是測試環境,不怕丟資料所以刪除無所謂,生產環境應該要謹慎。

【個人覺得,應該是可以在設定檔中指定disable journaling,然後去啟動mongodb,啟動成功後再enable重啟資料庫,還未嘗試~】


mongodb非正常關閉無法啟動

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.