linux处理删除占用的文件导致空间未释放的问题
今天收到监控报警,一台SDK服务器空闲空间不足10%,于是查看了一下,看看有没有能清理的文件,在检查时,执行lsof |grep deleted时发现,有个mysql的慢日志文件被删除了,但是空间没有释放,大约14G空间:加粗样式经判断,应该是谁发现了slow.log 占用了大量空间,在释放空间时,直接rm 删除了这个文件。下面要做的就是释放掉空间,最直接办法就是重启占用这个文件的进程...
·
今天收到监控报警,一台SDK服务器空闲空间不足10%,于是查看了一下,看看有没有能清理的文件,在检查时,执行
lsof |grep deleted
时发现,有个mysql的慢日志文件被删除了,但是空间没有释放,大约14G空间:加粗样式
经判断,应该是谁发现了slow.log 占用了大量空间,在释放空间时,直接rm 删除了这个文件。
下面要做的就是释放掉空间,最直接办法就是重启占用这个文件的进程,不过这上面有重要的业务,非必要不能重启进程。于是想到用truncate命令来把文件截断成0字节。
1.找到mysqld的进程id,就ps aux|grep mysqld
就可以了。我们找到的是2316
2.查看文件描述符:
ls -lh /proc/2316/fd |grep slow.log
得到:
root root 64 May 5 12:57 18 -> /data/mysql/3306/slow.log
3.截断文件:
truncate -s 0 /proc/2316/fd/18
这样空间就释放了。不过数据库目录下的slow.log其实仍然是删除状态,并且仍然被占用,表现就是数据库目录下没有slow.log
4.接下来就是执行sql语句:
set global slow_query_log_file='/data/mysql/3306/slow1.log';
set global slow_query_log_file='/data/mysql/3306/slow.log';
这样slow.log就出来了,然后把slow1.log删掉。
不过操作到这里,突然想到,其实没必要搞这么麻烦,直接执行那两句sql语句,应该就能解决问题了。不过前面的方法,更通用一些。
更多推荐
已为社区贡献1条内容
所有评论(0)