1.? 升級(jí)mongodb線上版本到3.2.15,然后啟動(dòng)新的進(jìn)程,沒有問題。
其次,使用以前的數(shù)據(jù)文件啟動(dòng)另一個(gè)進(jìn)程(指定了新的配置文件,實(shí)測(cè)mongodb 2.4的配置文件在測(cè)試機(jī)器上也可以用來啟動(dòng)mongodb),在生產(chǎn)環(huán)境的機(jī)器上每一次都會(huì)報(bào)錯(cuò)如下:
Invariant failure cce.get() src/mongo/db/catalog/database.cpp 187
[initandlisten] Got signal: 6 (Aborted)
mongod(_ZN5mongo15invariantFailedEPKcS1_j 0xCB)
2. 嘗試了 https://jira.mongodb.org/browse/SERVER-9032 , http://www.cnblogs.com/sailrancho/p/3392181.html
提到的設(shè)置locale, 無效!
差點(diǎn)而就打算使用 /usr/bin/mongod -f /etc/mongod.conf --repair . 但是我不放棄,絕對(duì)不應(yīng)輕易采用修復(fù)數(shù)據(jù)庫的方式(記得這樣是會(huì)需要非常多的磁盤空間的)。
逛遍了各大網(wǎng)站,沒有看到解決方案!
比如 https://segmentfault.com/q/1010000000602546 , https://jira.mongodb.org/browse/SERVER-14238, https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mongodb-user/3Ckmgph2Li4/IOznrpCYwAAJ , https://stackoverflow.com/questions/31273977/mongo-db-invariant-failure
3. 于是在測(cè)試機(jī)器和生產(chǎn)機(jī)器上參考官方配置文件,添加如下debug:
systemLog:
destination: file
logAppend: true
verbosity: 5
traceAllExceptions: true
#quiet: true
path: /sda/var/log/mongodb/mongodb300.log
4. 啟動(dòng)服務(wù),獲取日志。使用bcompare對(duì)比:
測(cè)試機(jī)器:
0800 D STORAGE? [initandlisten]? ? Recovering database: local
2017-07-24T13:34:21.374+0800 D STORAGE? [initandlisten]? ? Recovering database: mclog
后面一切正常
生產(chǎn)機(jī)器:
2017-07-24T13:25:04.906+0800 D STORAGE? [initandlisten]? ? Recovering database: system
2017-07-24T13:25:04.906+0800 D STORAGE? [initandlisten] mmf open /sda/var/lib/mongodb/system.ns
2017-07-24T13:25:04.906+0800 D STORAGE? [initandlisten] mmf finishOpening 0x7fc51ac90000 /sda/var/lib/mongodb/system.ns len:16777216
2017-07-24T13:25:04.906+0800 D STORAGE? [initandlisten] mmf open /sda/var/lib/mongodb/system.0
2017-07-24T13:25:04.906+0800 D STORAGE? [initandlisten] mmf finishOpening 0x7fc515c90000 /sda/var/lib/mongodb/system.0 len:67108864
2017-07-24T13:25:04.906+0800 D STORAGE? [initandlisten] allocating new extent
2017-07-24T13:25:04.925+0800 D STORAGE? [initandlisten] MmapV1ExtentManager::allocateExtent desiredSize:4096 fromFreeList: 0 eloc: 0:102000
2017-07-24T13:25:04.925+0800 D STORAGE? [initandlisten] 30 writes (1 kB) covered by 30 pre-images (1 kB)
2017-07-24T13:25:04.925+0800 D STORAGE? [initandlisten] 0 pre-images coalesced into 6 write intents
2017-07-24T13:25:04.928+0800 I -? ? ? ? [initandlisten] Invariant failure cce.get() src/mongo/db/catalog/database.cpp 187
5. 于是非常懷疑生產(chǎn)機(jī)器的system命名空間是哪里來的,里面有啥?
進(jìn)入dbpath,看到system.0,system.ns.
于是在dbpath下創(chuàng)建目錄testbak并把上面兩個(gè)文件mv進(jìn)去。再次啟動(dòng),成功了??!
6. 對(duì)于老的服務(wù),已經(jīng)不會(huì)在寫入新的數(shù)據(jù)(之前的版本使用的"storageEngine":"mmapv1",所以新版本會(huì)延續(xù)使用),所以將journal目錄重命名,并且設(shè)置
storage:
dbPath: /sda/var/lib/mongodb
journal:
enabled: false
再次啟動(dòng),可以使用。那么可以刪除以前的舊數(shù)據(jù)中的日志了。