用过linux服务器的站长们应该有阴影,线上服务器磁盘空间满了,就会无休止的报警。特别是下班回家路上,还要时刻思考服务器问题,真心很难放松下来。如果服务器空间满了怎么办?首先是日志文件需要实时监控,能避免服务器空间被占满,然后是考虑删更早的数据库备份或者是加硬盘?其实有一个,不用删就能解决硬盘空间不足方法。
服务器空间清理方案1:
首先,查看正式机日志,先看连接日志,返回的是500,那么初步确定是服务器上传文件的问题,跟同事沟通后,没有人动过正式机服务器。接着看catalina,没有日志。。。同事上次删除的时候还未删除完就停止了,导致线程冲突,日志未保存。看下空间是不是满了,上传和下载失败可能是服务器空间的问题,空间占满了,删除完一些文件,发现catalina文件过大,删除后在中午重启服务就好了。
问题原因描述:上传功能失效,代码逻辑没有问题。原因:服务器空间不足,使用完所有空间。
问题解决方案:删除catalina的文件,所有有关于上传需要用到系统资源的地方,如果多个功能点出现这个无法上传的问题,应当排查服务器自身的问题。这次就是服务器空间不足的原因。
服务器空间清理方案2:
实际操作
1、备份完数据,使用xtrabackup
2、对表空间进行硬链接(ln命令),目的是不删除文件本身,而只删除其指针,从而达到快速删除,不影响使用,不占用资源的目的。(依赖原理:OS HARD LINK 当多个文件名同时指向同一个INODE时,这个INODE的引用数N>1, 删除其中任何一个文件名只是删除了一个指针而已,不会删除数据文件。如果mv导致文件覆盖,文件相当于是被删除了,空间也应该释放了,然而没有。考虑到文件为mysql表空间文件,可能存在链接问题,重启mysql后,发现硬盘空间释放。
3、使用drop删除表,最后删除表文件。解决了硬盘空间问题,迎来了新的问题。在原数据库中建立同名表的时候,数据库一直提示表已存在,这就是直接删除表空间遗留下的问题。因为要新建一个空表,继续使用,所以也要解决这个问题。
4、登陆数据库进行drop表测试,发现提示找不到这张表t1。考虑到表空间不存在,手动建一个空的表空间。首先是建了一张结构一样但是表名称不一样的表t2,复制t2的表空间并重命名为t1的表空间。重启数据库,然后再进入数据库,先分离表空间,再drop表,发现可以成功。然后新建t1表,也可以成功。最后将t2表删除。
5、此操作虽然没有问题,但是t1表中原始数据会丢失,所以在操作数据库之前一定要备份数据。
总结:虽然这是一个不大不小的问题,特别记录下来,有需要的朋友可以看一下。当然也有一个意外收获,那就是这样删除比drop速度要快得多,而且还不占用资源。其实除了以上方式,还有以下四种方式清理服务器空间。
1、删除无用的安装包
在apt-get命令中,有一项“autoremove”自动移除选项。这个选项能够移除一些无用的自动安装包和库,也可以删除那些在系统升级中自动安装的就得Linux内核。sudo apt-get autoremove
2、清空系统中的APT缓存
APT的全称是Advanced Package Tool,即高级软件包工具,他是一个成熟的软件包管理系统。Ubuntu使用APT在系统上进行软件的安装、管理和卸载,而在进行这些操作之后,APT会保留以前下载和安装过的软件包缓存。你可以通过一下这个命令来查看你的缓存大小:sudo du -sh /var/cache/apt
3、清理thumbnail缓存
对于Linux为内核的大多数系统中(包括安卓),都会有thumbnail,可以直译为“缩略图”,也就是说Ubuntu会自动创建一个缩略图版本,并存储在文件管理器中。一般来讲, 这种缩略图存储在一个隐藏目录中,位于~/.cache/thumbnails。最快速的方法就是终端上使用清理命令:rm -rf ~/.cache/thumbnails/*
4、卸载不常用的软件
如果你需要卸载这些使用频率很低的软件,并且知道这个软件的名字的话,可以使用命令进行卸载。