1.? 升級(jí)mongodb線上版本到3.2.15叛赚,然后啟動(dòng)新的進(jìn)程虫几,沒有問題肺稀。
其次鳍侣,使用以前的數(shù)據(jù)文件啟動(dòng)另一個(gè)進(jìn)程(指定了新的配置文件丁稀,實(shí)測(cè)mongodb 2.4的配置文件在測(cè)試機(jī)器上也可以用來(lái)啟動(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倚聚, 無(wú)效线衫!
差點(diǎn)而就打算使用 /usr/bin/mongod -f /etc/mongod.conf --repair . 但是我不放棄,絕對(duì)不應(yīng)輕易采用修復(fù)數(shù)據(jù)庫(kù)的方式(記得這樣是會(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命名空間是哪里來(lái)的,里面有啥攻臀?
進(jìn)入dbpath,看到system.0,system.ns.
于是在dbpath下創(chuàng)建目錄testbak并把上面兩個(gè)文件mv進(jìn)去焕数。再次啟動(dòng),成功了E傩ァ堡赔!
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ù)中的日志了。