记录一次MySQL数据库CPU负载异常高的问题

1、起因

某日下午18:40开始,接收到滕讯云短信报警,显示数据库CPU使用率已超过100%,同时慢查询日志的条数有1500条左右。

正常情况下:CPU使用率为30%-40%之间,慢查询日志条数为0.

 

2、查询原因

因接收短信时,正好在回家的路上,无法处理,所以只能到家再处理。

在路上的时候,接收了几次恢复短信和再次异常短信。说明问题是一时有,一时恢复。

到家后,登录腾讯云数据库控制台,查询监控,发现CPU使用率确实为145%,且持续时间是20分钟。

18:40-19:00

19:20-19:40

然后,我登录腾讯云的phpMyAdmin控制台,想尝试看下有哪些查询正在发生。于是执行了show processlist命令,不巧的是,我执行命令的时候,高峰期已过,看不到任何查询。

于是,我下载了18:00-19:00之间的慢查询日志文件,想从中找到问题。下载之后,发现第一条慢查询开始的时间正是18:41分钟。且查看整个文件,发现都是同一条SQL语句,查询的是同一张表,且uid始终是同一个。

由于我对于业务不是很熟悉,于是我将这些SQL语句截图发给了开发人员。开发人员在看到SQL语句后,找到了相应的代码位置,并告诉了我,引发该SQL查询的原因是请求了某个地址,/account/...。

然后我下载了负载均衡的访问日志,只下载了18:00-19:00时间段的。我根据开发人员提供的URI,查询日志,发现真有记录。

然后,我尝试过滤该日志,以确定访问地址。我首先过滤整个日志,以统计/account/...出现的数量。发现数量为7900条。为了得知这7900条是否为18:00-19:00出现的,于是我单独过滤了日志中带"18:4"字符串的数量以及"19:5"字符串的数量。发现两者加起来的数量为7600条。说明这7900条请求确实是从18:40-19:00这个时间段开始发起的。

且很明显的是,所有请求来自同一个IP地址。原因很明显了,就是某个白痴在发起异常请求。

 

3、处理办法

首先在负载均衡的防火墙上限制了该IP的访问。然后开发人员也加上了CSRF。

posted @ 2019-07-28 13:49  道霖  阅读(1238)  评论(0编辑  收藏  举报