记一次磁盘写满导致mysql服务挂掉问题的排查过程

问题:测试环境13.113数据库服务器mysql服务不可用

1、df -h

检查服务器磁盘占用情况,发现磁盘占满,预计是导致mysql服务不可用的原因,通过清理没用的日志文件,重新启动mysql,发现服务可以正常启动。

此时发现,空间占用还在以每小时2G的速度增加,显然是因为有某个进程在写入磁盘。下面进行空间优化及问题排查。

2、du -h --max-depth=10 /* | awk '{ if($1 ~ /M/){split($1, arr, "M")}; if(($1 ~ /G/) || ($1 ~ /M/ && arr[1]>200)) {printf "%-10s %s\n", $1, $2} }' | sort -n -r

 发现,磁盘占用较大的是如下几个类型的文件,逐个清理、

3、排查过程

1)、Xxl-job下的文件
xxl-job产生的日志文件,该日志文件没什么用处,优先将其删除,保证mysql服务可以正常启动。

 2)、tomcat日志文件

路径:/opt/tomcat/logs/

该文件夹下面除了业务日志外,还包含了一个catalina.out文件,该文件包含tomcat运行自己输出的日志以及应用里向console输出的日志。本示例中,该文件占用空间19G,其他业务日志总共占用1G空间,清空catalina.out,不影响tomcat运行的命令如下:

 3)、maildrop下的文件

该文件夹下的文件,是在执行cron时,会将cron执行脚本中产生的信息以邮件的形式发送cron的所有者,但是由于sendmail或postfix邮件发送未正常运行,导致邮件发送不成功,堆积在了maildrop目录下面。首先将这些文件删除:
cd /var/spool/postfix/maildrop

ls | xargs rm -rf

网上提供了2种根本上解决该问题的方案:

A、修改crontab的配置文件

将其中的MAILTO=ROOT,修改为MAILTO=””

B、修改crontab

 Vim查看其中一个生成的文件,可在其中找到是哪个crontab任务导致这个文件的生成,

在crontab -e该命令后,加上一行
 >/dev/null 2>&1

例如:

 将产生的输出到/dev/null,经过测试发现没有再出现新的文件。

如果输出内容有需要保存的话,可以输出到指定文件。

 

4)mysqldump下的文件
该文件夹下的文件,主要是数据库备份文件,可以考虑将其中不需要的进行删除。

5)mysql/var下的文件

该文件夹下的文件,主要是mysql的binlog日志文件,经过观察发现,该文件夹的最新binlog文件增长速度很快,接近最初排查时候发现磁盘的增长速度,所以,磁盘增长速度过快的直接原因,是mysql的binlog日志增长较快导致!

4、进行处理

1)将没有用的binlog日志删除;

2)在mysql中运行如下sql,查找哪个IP的连接导致了大量的binlog。

B、select SUBSTRING_INDEX(host,':',1) as ip , count(*) from information_schema.processlist group by ip;

3)跟进该web服务器的tomcat日志,发现其中某个接口调用频繁,是其中一个业务端在调用,另外获悉,对方的测试人员错误的将该接口配置在一个定时任务中,每分钟调用一次。对于业务端来说,每分钟调用一次不会有任何性能问题,但是每次的调用,本服务将对所有的相关数据进行一次update,由于mysql的binlog模式是row模式的,该模式下,会将该表所有字段都附加在binlog中记录,导致binlog日志异常增长,服务器磁盘打满,最终导致mysql服务不可用。

4)停掉业务端(10.100.19.110)的错误调用,binlog日志不再增长,磁盘空间稳定,问题解决。

思考:在我们的web端应该对这样的异常请求进行拦截,不允许超过限制次数调用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值