Ubuntu服务器中MySQL数据库占用空间异常过大问题求助
解决MySQL的/var/lib/mysql目录占用空间过大问题
首先执行以下命令定位目录内占用空间的文件/文件夹:
du -sh /var/lib/mysql/*
1. 二进制日志(binlog)占用过多
这是最常见的原因,binlog用于数据恢复和主从同步,若未配置自动清理会持续膨胀。
- 查看当前binlog文件及正在使用的日志:
ls -lh /var/lib/mysql | grep -i bin mysql -e "SHOW MASTER STATUS;"
- 清理过期日志:
- 按时间清理(保留7天内的日志):
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
- 按指定文件清理(仅清理到指定日志之前的文件):
PURGE BINARY LOGS TO 'mysql-bin.000123';
- 配置自动清理避免再次膨胀:
编辑/etc/my.cnf或/etc/mysql/my.cnf,添加:
# 保留7天的binlog,用秒数配置则写 binlog_expire_logs_seconds = 604800 expire_logs_days = 7
重启MySQL生效:
systemctl restart mysql
2. InnoDB共享表空间(ibdata1)膨胀
ibdata1是InnoDB的共享表空间,默认会自动增长且不会主动收缩,即使删除数据也不会释放空间。
- 全量备份所有数据库:
mysqldump -u root -p --all-databases > all_dbs_backup.sql
- 停止MySQL服务:
systemctl stop mysql
- 删除共享表空间和日志文件:
rm /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1
- 配置独立表空间(避免后续膨胀):
编辑my.cnf,添加或确保以下配置:
innodb_file_per_table = 1
- 启动MySQL并恢复备份:
systemctl start mysql mysql -u root -p < all_dbs_backup.sql
3. 慢查询/错误日志文件过大
- 查看日志文件大小:
ls -lh /var/lib/mysql/*slow.log /var/lib/mysql/*.err
- 安全截断日志(避免删除文件导致MySQL写入失败):
truncate -s 0 /var/lib/mysql/mysql-slow.log truncate -s 0 /var/lib/mysql/mysqld.err
- 配置日志轮转自动管理:
创建/etc/logrotate.d/mysql文件,写入:
/var/lib/mysql/*.log { daily rotate 7 compress delaycompress missingok notifempty create 640 mysql mysql sharedscripts postrotate systemctl reload mysql > /dev/null 2>&1 endscript }
4. 临时文件残留
MySQL异常退出可能残留临时表或临时文件,检查并清理(操作前建议停止MySQL):
find /var/lib/mysql -name "#*" -o -name "*tmp" | xargs rm -f
5. 备份文件或其他残留文件
检查目录内是否有备份SQL、压缩包等无用文件:
ls -lh /var/lib/mysql | grep -E "(sql|tar|gz|zip)"
确认无用后直接删除:
rm /var/lib/mysql/xxx_backup.sql
内容的提问来源于stack exchange,提问作者Sonjay Sarker
相关产品推荐
相关产品推荐

