mysqld 无法启动,因为磁盘空间已满:
101221 14:06:50 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
101221 14:06:50 [ERROR] Can't start server: can't create PID file: No space left on device
跑步df -h
:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 16G 3.2G 12G 23% /
/dev/sda5 4.8G 4.6G 0 100% /var
/dev/sda3 430G 855M 407G 1% /home
/dev/sda1 76M 24M 49M 33% /boot
tmpfs 956M 0 956M 0% /dev/shm
du -sh *
在/var
:
12K account
56M cache
24K db
32K empty
8.0K games
1.5G lib
8.0K local
32K lock
221M log
16K lost+found
0 mail
24K named
8.0K nis
8.0K opt
8.0K preserve
8.0K racoon
292K run
70M spool
8.0K tmp
76K webmin
2.6G www
20K yp
在 中/dev/sda5
,有网站文件/var/www
。
/var/www
因为这是第一次,除了移动到其他分区之外,我不知道要删除哪些文件
另外,删除日志文件、历史记录等的正确方法是什么/dev/sda5
?
答案1
快速而肮脏:将您的移动/var/www
到/home/www
,然后创建一个符号链接:
rsync -a /var/www /home &&
rm -r /var/www &&
ln -s /home/www /var/www
长期来看:也许将您的/var/www
和/var/log
目录放入它们自己的专用分区中。您可能可以缩小/home
并使用释放的空间来创建合适的分区。
答案2
- 我会
mv /var/log/*gz /var/log/*.0 /home/backup/var/log
yum clean packages
或者 apt-get clean 从 /var/cache 中删除内容- 是的,将 /var/www 移动到 /home
- 也许删除 /var 分区..
答案3
的细分情况如何/var/lib
?如果像我的系统一样,其中大部分(例如 500 MB)都被占用了/var/lib/mysql
?
其他数字看起来都很正常和合理,因此/var/lib/mysql
是/var/www
唯一现实的长期解决方案。
为了删除旧的日志文件,您的日志是否正在轮换,例如,您有/var/log/messages
,,,等等,或者可能有,,等等?/var/log/messages.1
/var/log/messages.2.gz
/var/log/messages-20101221
/var/log/messages-20101220.gz
最明显的方法是根据年龄来删除,例如
# find /var/log -type f -mtime +14 -print
# find /var/log -type f -mtime +14 -exec rm '{}' \;
另外,请检查您的 logrotate 设置是否符合/etc/logrotate.conf
您的要求。我认为您不应该更改它们,因为它们不是您的主要问题,但也许您只想保留一周的日志,在这种情况下,请尝试以下操作:
daily
rotate 7
create
compress
include /etc/logrotate.d
然后有针对每个服务的文件,例如 syslog、mysql、apache 等,用于配置每个服务的日志轮换。在 Debian 和 Red Hat 系统上,这些应该已经为您设置好了。
如果您还没有 logrotate,那么会有点困难。我会考虑使用 grep 或 tail 保存最近的条目,然后删除文件并重新启动 syslogd(例如service syslogd restart
或pkill -HUP syslogd
。
最后,我针对这种情况编写了一个脚本diskuse
。
# test -d ~/bin || mkdir ~/bin
# svn cat http://svn.mikelward.com/svn/scripts/diskuse > ~/bin/diskuse
# chmod +x ~/bin/diskuse
# ~/bin/diskuse -A /var > ~/biggest-files-in-var.txt
# head ~/biggest-files-in-var.txt
# ~/bin/diskuse -T -A /var > ~/biggest-dirs-in-var.txt
# head ~/biggest-dirs-in-var.txt
# ~/bin/diskuse -a 1d /var > ~/biggest-files-in-var-that-changed-today.txt
# head ~/biggest-files-in-var-that-changed-today.txt