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

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

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


瞅一眼

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

【MySQL】就这一篇帮你解决 MySQL 磁盘占用过高的问题_第1张图片

两眼蒙圈,不知道是啥鬼,之前对 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 挂载目录生成的文件很多,我第一次看也头大,所以选择逃避。不过针对刺头查一下文章,还是可以解决的。
  • 平时可能没有太在意这些个配置,可以为之后借鉴一下。
  • 还有很多调优的方式,生产需要注意的地方,有大佬知道的可以相互交流下~

你可能感兴趣的:(mysql,mysql,数据库,磁盘空间,binlog,日志,docker)