问题描述
服务器的磁盘空间比较小,大概20G左右,突然有一天发现mysql查询无法执行了。
在navicat中,刷新数据表的时候,
提醒错误:Got error 28 from storage engine。
SQL语句也无法执行。
然后我就很悲催的重启了mysql服务。
这下完了,再也启动不了mysql服务了。
因为最终排查到错误信息说是磁盘空间占用满了,
通过df -h命令,查看,发现磁盘空间确实占用了100%,
所以mysql不可能起的的起来的。
现在只能通过腾出一些服务器的磁盘空间,才能将mysql启动的。
思路
服务器的空间本来就不大的,只能清除一些不常用的文件,才可以
- 程序运行过程中,产生的一些日志文件
mysql产生的mysql-bin.xxxxxx文件(因为发现这个文件比较大,他自己一个文件都有2~3个G的,因此考虑将该文件删除)
分析
先对mysql-bin.xxxxxx文件进行分析,该文件是mysql的操作日志文件。
例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。
该文件的主要作用,是数据恢复、主从同步数据等。
如果msyql服务器在正常运行,能进入的话,直接进入mysql的控制台,执行命令:reset master;,就会将mysql-bin.xxxxxx文件清除了
但是msyql服务已经无法启动了,因此只能考虑第1条,考虑定时清空删除一些手动记录的日志文件了。但是手动删除不是长久之计,因此要定时删除这些文件。
- 查找日志目录下,超过7天未有修改记录的日志文件,执行
rm删除。 - 每天定时
crontab执行该命令。
查找目录下,超过7天的文件,并且执行删除操作命令:
删除文件:find /path -mtime +7 -type f -name '*.log' | xargs rm -f
删除目录:find /path -mtime +7 -type d | xargs rm -rf(删除path目录下,创建时间超过7天的文件夹)
path是需要查找日志文件的目录。-mtime +7是指修改时间距离当前时间超过7天的文件-type指类型是文件-name文件名字,参数可省略xargs是同步执行命令
最终,可配置定时任务:
0 2 * * * find path -mtime +7 -type f -name '*.log' |xargs rm -f >> /dev/null