针对Leanote使用的MongoDB存储引擎升级
Leanote    2019-10-04 11:32:08    1282    0    0
acme   Leanote

上次,我写了一片博文,    关于Leanote自建服务器点击这里,而就在我这篇博文刚发布不久MongoDB的4.2版本就正式发布,这也是一种重要版本,更新了许多新的特性。当然,对那些不怎么不使用MongoDB的人来说,新特性并没有什么重要的,但是如果对一直使用Leanote自建服务器,并且从以前就开始使用的人来说是会有一点影响的。

    当MongoDB系列软件升级到4.2这个版本以后,会发生数据库无法启动,并伴有报错提示。

** WARNING: Support for MMAPV1 storage engine has been deprecated and will be
**          removed in version 4.2. Please plan to migrate to the wiredTiger
**          storage engine.
**          See http://dochub.mongodb.org/core/deprecated-mmapv1

    因为Leanote当初开发之际,用MongoDB的时候,存储引擎用的是mmapv1,但是随着mmapv1的一些缺点,还有新的存储引擎去弥补了mmapv1的缺点,导致mmapv1已经被淘汰,先从建库时候的默认存储引擎更改,接着又被官方建议不要使用,到现在的这个版本终于被官方废弃所不再支持。

    官方给了很长一段时间让我们这些使用者去更改,毕竟从3.x的版本到4.2的版本时间还是很久的,但是我相信,有一些使用Leanote自建服务器的人,针对MongoDB了解得并不是很多,所以可能遇到这个问题,于是决定更新这边文章,来帮助解决更换存储引擎这个问题。

    首先,需要先确认你当前的数据库使用的是哪一个存储引擎,启动数据库以后,使用mongo命令连接数据库。接着使用db.serverStatus().storageEngine;命令查询当前数据库的存储引擎信息。

如果返回wiredTiger存储引擎,那么说明不需要进行切换。

如果返回mmapv1存储引擎,那么说明就需要进行切换。

比如我这里,mongodb的数据库目录,是leanoteData,那么在操作之前,请先关闭数据库,同时也将Leanote服务端的应用程序关闭,如果有其他应用也使用MongoDB数据库,请也同样关闭,以免再调用到MongoDB数据库,使得备份过程产生数据的差异。

直接使用

cp -r leanoteData leateData_Back

上面这个命令是将数据库的目录直接在文件上备份一遍,当然,如果可以,建议将Leanote的应用目录也同样复制一份备份,因为Leanote的目录下,有笔记的图片、附件等等信息。

操作之前,要数据备份!!!

做完上面的操作以后,将MongoDB启动起来。

#首先 新建一个目录
mkdir db_backup
#其次 备份数据库
#-h后面的参数表示数据库服务端的地址 --port表示数据库的端口 
#-o表示数据库备份到哪一个目录
#如果使用的是默认端口和本地地址,那么-h和--port都可以直接省略
mongodump -h 127.0.0.1 --port 27017 -o db_backup/
#随着屏幕会出现一些提示滚动 并且 done xxx done xxx表示备份完成以后 退出数据库
#这个时候可以讲leateData这个目录,改名或者删除
#虽然前面已经备份过目录,但是我这边还是改名,不去进行删除操作
mv leanoteData leanoteData_Back_1
#新建一个目录,这个目录用于存放数据库
mkdir leanoteData
#setsid 是将当前的进程隐藏 --dbpath是数据库的路径,我们现在这个目录是个空目录
#--storageEngine是指定存储引擎,因为以前的默认存储引擎是mmapv1
#其实在现在的版本中可以不加这个参数,因为wiredTiger早已经是mongodb的默认存储引擎
setsid mongod --dbpath leanoteData --storageEngine wiredTiger
#当看到 build index done差不多就可以看到数据库启动了
#然后连接数据库
mongo
#查询当前连接的数据库使用的存储引擎信息
db.serverStatus().storageEngine;
#如果查询出来"name" : "wiredTiger"那么就说明新建的数据库使用的存储引擎是wiredTiger
#退出mongo连接
exit
#恢复备份的数据  请注意,
#这里是没有加-d参数的,备份了整个目录下的所有数据库,那么便恢复所有数据库
mongorestore --dir db_backup
#等待进度条跑完
#连接数据库
mongo
#查看数据库
show dbs
#看一下leanote数据库是否恢复了回来
#然后使用这个数据库
use leanote;
#查看表
show tables;
#最后找一个表db.表名.find(); 直接这样粗俗的查询一下
#比如我这里直接查笔记这个表,因为缓存大小,如果数据很多是无法全部查询出来的
#只要看一下有没有数据
db.notes.find();
#关闭数据库管理
exit
#加一个shutdown参数关闭整个数据库
mongod --dbpath leanoteData/ --shutdown

做完这些操作以后,就可以升级数据库了。

不过还有需要注意的是,mongodb版本升级,如果跨度太大,会升级失败。

当前版本4.2,我就贴一下升级说明的地址点击这里

上面是4.2的,左边有以前的版本上来的升级方式,我就简单说一下可以使用的升级路线,从3.0升级3.0-->3.4-->3.6-->4.0

大概就是这样的软件安装级别,但是还有一个就是兼容性设置。

#连接数据库
mongo
#切换管理员
use admin
db.adminCommand( {getParameter:1,featureCompatibilityVersion:1} )

由于我这里版本比较高,就贴一张图看一下,这里查询出来的兼容性版本,在升级完软件以后,使用

#更新兼容性版本
#这里的版本根据上面的文档中来,升级到哪一个版本以后就可以调整这里的兼容性版本
db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )

当软件版本和兼容性版本都升级到这里以后就可以去升级一下4.2的版本,体验一下mongodb最新版本带来的功能了。

最后,别忘了登录客户端去看看自己的笔记是否正常,里面的数据是否还在。

最后的最后,注意!!!

操作之前,一定要进行数据备份!!!

Pre: Leanote自建服务器

Next: 07、SpringBoot 内部、外部配置文件加载以及Profile配置

1282
Table of content