du 、ls 查看到文件大小 与 df 、lsof 的结果不一致的问题
现象:
[root@localhost ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 129G 22G 101G 18% /
[root@localhost ~]# du -sh /
13G /
[root@localhost ~]# ll -h /var/lib/mysql/localhost.err
-rw-rw---- 1 mysql mysql 3.8K Sep 14 09:30 /var/lib/mysql-5.1.48/localhost.err
[root@localhost ~]# lsof -n|grep localhost.err
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 28390 mysql 1u REG 8,3 9895273063 30146639 /var/lib/mysql/localhost.err
mysqld 28390 mysql 2u REG 8,3 9895273063 30146639 /var/lib/mysql/localhost.err
统计结果的差别主要是因为这个文件:localhost.err ,是mysql的日志文件,因为应用的SQL语句中包含limit 1,而binlog_format为STATEMENT,所以mysql一直会有报错信息写入日志文件中(这个问题参考http://bbs3.chinaunix.net/viewthread.php?tid=1471047)。
我觉得这个重复的报错信息会把日志文件写得很大,就用sed -i 定期修改mysql日志文件:
/bin/sed -i "/Statement may not be safe to log in statement format./d" /var/lib/mysql/localhost.err
后来就发现了这样的情况(du 、ls 查看到文件大小 与 df 、lsof 的结果不一致的问题),如果只是du 和 ls 统计文件大小有误也就无所谓了,问题是cat localhost.err 也只看到很少几行文字,实际上mysql还在继续写错误日志到localhost.err(从lsof的结果可以看出),但是cat localhost.err 却看不到,这是不是就是文件系统不一致了?如何解决呢? 难道能用sed -i 修改msyql日志文件吗?
作者: wlong2000joint
发布时间: 2010-09-14