上次,我写了一片博文, 关于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最新版本带来的功能了。
最后,别忘了登录客户端去看看自己的笔记是否正常,里面的数据是否还在。
最后的最后,注意!!!
操作之前,一定要进行数据备份!!!