引子
小白之前一直用cloudreve当个人网盘,然后配合aria2做离线下载,之前一直是部署在vps上,cpu性能有限,离线下载也不敢同时下好几个文件,动不动就cpu100%,但是个人轻量使用,其实没有啥问题。这几天在独服上部署了cloudreve和aria2,想着独服性能上去了,离线下载也可以同时进行多个下载任务了,可是下着下着,就提示database is locked……
去网上搜索了下,是sqlite的原因,cloudreve默认是使用sqlite作为数据库的,sqlite胜在方便,不需要单独配置,但是在面对高并发任务时貌似有点心有余而力不足。
解决方案
解决方法主要有三种,
- 对sqlite进行一些修改和优化,使其可以应对高并发任务
- 将sqlite转化成MySQL格式,导入到新建的MySQL数据库
- 直接使用MySQL替换sqlite
第一种方法貌似比较复杂,想要尝试的小伙伴可以参考这两篇文章。
解决SQLite database is locked
sqlite3 database is locked 问题解决方案
而第二种方法呢,小白水平有限,涉及到sqlite和MySQL的转化和导出导入,有兴趣的小伙伴可以尝试下,小白把大佬的教程贴在参考文献里。
小白刚好机器上安装了宝塔和MySQL,这里直接采用第三种方法。
实操
小白已经将cloudreve加入systemd进程守护,先将其停止,systemctl stop cloudreve
,然后我们在宝塔建立一个新的数据库(cloudreve只支持5.7及以上版本)。
这里我使用的是名为 cloudreve 的数据库 用户名 cloudreve 密码 cloudreve (不要这样学我,安全隐患很大
)
进入cloudreve目录,编辑cloudreve配置文件。
[Database]
; 数据库类型,目前支持 sqlite | mysql
Type = mysql
; MySQL 端口
Port = 3306
; 用户名,根据自己情况修改
User = cloudreve
; 密码,根据自己情况修改
Password = cloudreve
; 数据库地址,根据自己情况修改
Host = 127.0.0.1
; 数据库名称,根据自己情况修改
Name = cloudreve
; 数据表前缀
TablePrefix = cd
更多详细配置项,见 cloudreve官方文档。
然后我们重新启动cloudreve。
./cloudreve
执行完毕后会显示监听的端口和新的管理员用户与密码,我们先登录上去更改用户名和密码,这里注意,更换数据库配置后,Cloudreve 会重新初始化数据库,原有的数据将会丢失,但是后续我们可以导入原来的文件。
修改完成后我们退出,然后重新用systemctl start cloudreve
启动cloudreve,这时会有一个问题,那就是我们之前网盘里的文件全都不见了,如果是采用第一种和第二种方法就不会有这个问题,所以还是要加强学习……好在cloudreve非常贴心的提供文件导入功能,也算是一种解决方案吧。我们进入cloudreve管理后台,点击文件,直接从外部导入即可。
好了,大功告成,又可以愉快的下片了,所以呢,最好的方式就是不要怕麻烦,一开始就采用MySQL就不会有这些问题了。
参考文献
使用Cloudreve搭建属于自己的网盘_极客代码-极致生活-程序员宅基地