宝塔面板磁盘占满主因是日志文件,重点检查/www/wwwlogs(Nginx/Apache访问日志)和/www/server/data(MySQL二进制日志);需用du命令定位大文件,合理轮转清理Nginx日志,关闭或限制MySQL binlog,并处理已删除但被进程占用的日志文件。

宝塔面板磁盘占满:先查 /www/wwwlogs 和 /www/server/data
宝塔面板磁盘爆满,80% 以上是日志文件撑的,不是网站代码或数据库内容本身。重点盯两个目录:/www/wwwlogs(Nginx/Apache 访问日志)、/www/server/data(MySQL 数据目录,里面藏着二进制日志 mysql-bin.000xxx)。
执行命令快速定位大文件:
du -sh /www/wwwlogs/* | sort -hr | head -5
du -sh /www/server/data/mysql-bin.* | sort -hr | head -5
-
/www/wwwlogs下的xxx.log或error.log单个超 1GB 很常见,尤其开了全量访问日志又没轮转 -
/www/server/data下的mysql-bin.*文件成百上千个、总和几十 GB,说明 MySQL 的binlog没关也没清理 - 别急着删!
rm -f直接删mysql-bin.*可能导致主从同步断裂或无法恢复数据
清理 Nginx 日志:用宝塔自带轮转 + 手动清空旧文件
宝塔默认开启日志切割,但「保留天数」设为 30 天甚至 90 天,日志文件实际不会自动删除——只是挪到 /www/wwwlogs/xxx.log-2024-01-01 这类归档路径,仍占空间。
- 进宝塔 → 网站 → 对应站点 → 「日志」→ 关闭「启用日志」再打开,强制触发一次切割(可选)
- 手动清理归档日志:
find /www/wwwlogs -name "*.log-*" -mtime +7 -delete(删 7 天前的归档) - 清空当前日志(不删文件,释放 inode):
echo "" > /www/wwwlogs/xxx.log(注意别用>错写成>>) - 如果站点已下线,直接删整个
/www/wwwlogs/xxx.com目录更省事
关闭并清理 MySQL 二进制日志:binlog 不是必须开的
除非你在做主从复制、或者依赖 mysqlbinlog 做增量恢复,否则生产环境完全可以关掉 binlog。它默认开启,且永不清除,是磁盘杀手。
- 确认是否启用:
mysql -uroot -p -e "show variables like 'log_bin';",返回ON就开着 - 临时清空所有 binlog:
mysql -uroot -p -e "reset master;"(慎用!会清空所有 binlog,主从环境下绝对禁用) - 永久关闭:编辑
/etc/my.cnf,在[mysqld]段下加一行skip-log-bin,然后重启 MySQL:service mysqld restart - 如果不能关,至少限制大小:
expire_logs_days = 3+max_binlog_size = 100M,改完也要重启
清理后空间没释放?可能是被进程锁住的已删除文件
删了大日志文件,df -h 显示空间没回来?大概率是 Nginx 或 MySQL 还在往已被 rm 掉的文件句柄里写日志——文件名没了,但磁盘块没释放。
- 查谁占着已删日志:
lsof +L1(需安装yum install lsof或apt install lsof) - 常见输出如:
nginx 1234 root 6w REG 253,1 2.1G 0 0 /www/wwwlogs/xxx.log (deleted) - 解决办法只有两个:
kill -USR1 1234(让 Nginx 重新打开日志文件),或直接重启服务:bt restart - MySQL 类似,但不能随便 kill,优先用
service mysqld reload(平滑重载配置)
清理日志这事,核心就两条:别让日志无限制累积,也别删了还留着句柄不放。后者最容易被忽略,看着文件没了,空间却卡死不动。










