写点什么

【MySQL】就这一篇帮你解决 MySQL 磁盘占用过高的问题

作者:非晓为骁
  • 2023-10-08
    福建
  • 本文字数:1242 字

    阅读完需:约 4 分钟

这篇博客主要是来解决 mysql 落盘日志占用磁盘空间过大的问题。我是用 docker 启动的 mysql,然后把 /var/lib/mysql 挂载到宿主机上。有人反馈网页点击无反应,我想的是这么简单,也没改动怎么会报错呢。上服务器,刚好无意看了下 df -h,好家伙磁盘全满,其中挂载 msyql 的文件夹基本上全占。那只好解决了,虽然找运维扩磁盘是一个更舒服的选择,不过这个问题我碰到好几次了。之前都是删掉没用的,先能用再说,不过删到后面,实在没啥可以删的了。


接下来,来看看我的解决思路。



瞅一眼

看一下挂载目录里面是什么文件占这么大



两眼蒙圈,不知道是啥鬼,之前对 mysql 没有做过多了解。不过肉眼可见的,可以看到有 2 类文件占用了很大。


啥都不懂,就先看看文件最大的能不能删嘛。


*.log 文件和 mysql-bin.* 文件,这两类占据了很大的空间,不知道干啥的,就去找一下这两货是啥。

是啥货

详细的不在这边说,就知道这文件大概是干啥的就行

mysql-bin*

有眼不识泰山,原来是 mysql 的 binary log。


二进制日志记录了所有的 DDL(数据定义语言)语句和 DML(数据操作语言)语句,但是不记录包括数据查询的语句。


不知道能不能删,等下找找,大概率不能乱删

*.log

原来是 general log,难怪这么大。


general_log,会将所有到达 Mysql Server 的 SQL 语句记录。


这个肯定能删,而且现在 sql 语句都应该可以到日志聚合系统查看,可以不用在这上面看。

盘他

binary log

网上都有,按照此步骤即可删除。前面已经看到,有很多 mysql-bin 文件,所以直接找到现在 mysql 在用的,也就是我不能删的文件是哪个。


如果看不到挂载目录,只能指令查看,或者数据库 IDE 的,可以用 show binary logs 来查看总的 mysql-bin 文件


  • 查看正在使用的日志文件

  • show master status



  • 删除可删除的 mysql-bin 文件

  • purge binary logs to ‘mysql-bin.000029’

  • 在到目录看一下,就没了,无需重启

general log

这个网上,比较少,不过也就是清空文件而已。


cat /dev/null > 7b130360affe.log


其中 log 是那个最大的文件,切记不要直接 rm -rf log,这大概率删不掉。

没有下一次

上面删除的方法都是暂时的,就是过一段大概率还会出现磁盘剩余空间不足的问题,所以还得预防一下。

binary log

可以设置自动清理的天数


修改 my.cnf 里面的 expire_logs_days 为 3 或者一个你觉得几天需要自动清理一次日志的天数。


修改完后,需要重启不然不生效


不想要重启的可以在 mysql 里面执行 set global expire_logs_days = 3 这样子也行,不过重启之后就会恢复。

general log

默认 general log 开起来,不过可以关掉,没啥必要


修改 my.cnf 里面的 general_log 为 0


修改完后,需要重启不然不生效


不想要重启的可以在 mysql 里面执行 set global general_log = 'OFF' 这样子也行,不过重启之后就会恢复。



总结

  • 有针对性地去解决问题,msyql 挂载目录生成的文件很多,我第一次看也头大,所以选择逃避。不过针对刺头查一下文章,还是可以解决的。

  • 平时可能没有太在意这些个配置,可以为之后借鉴一下。

  • 还有很多调优的方式,生产需要注意的地方,有大佬知道的可以相互交流下~


用户头像

非晓为骁

关注

no pain no gain 2019-04-10 加入

用我的勤奋,一点一点地努力,提升自己的能力,拓展自己的视野,提高自己的认知。 我的知乎:https://www.zhihu.com/people/zhengfke

评论

发布
暂无评论
【MySQL】就这一篇帮你解决 MySQL 磁盘占用过高的问题_MySQL_非晓为骁_InfoQ写作社区