mysql磁盘满问题排查解决

695 阅读1分钟

1、现象:查询慢,插入数据插入不了,进程卡住

2、排查

df -h  查看,发现/mnt  磁盘200G,使用100%,还剩下20k的磁盘空间
du -h --max-depth=1 /mnt/   进一步排查
cd /mnt/mysql/data
ll            排查到这个文件夹的binlog太多导致撑满

3、解决

执行sql,清除3天之前的binlog
PURGE MASTER LOGS BEFORE DATE_SUB(NOW( ), INTERVAL 3 DAY); 
进程卡住,分析
show PROCESSLIST   发现清除线程是staring状态,但是不执行,分析原因可能是磁盘可用空间太小20k
把一个1G多的binlog移到别的地方
mv mysql-bin.000205  /opt/
再刷新,发现binlog已经被清除,磁盘空间可用97%,问题解决

4、防止问题重现

找到mysql的配置文件,加入定期清除的变量
vi /mnt/mysql/conf/sonar.cnf
加入配置,保存
expire_logs_days = 15
cd /mnt/mysql/
sh run.sh     此脚本会删除docker容器,并重启
执行sql,查看变量是否设置成功
show variables like '%expire_logs_days%';
可以查出来 expire_logs_days 的值为15,就ok了!