记一次mysql问题告警和排查
今天突然监控宝报警,网站无法访问了,自己一上,果然上不了,提示数据库连接错误
由于VPS上除了博客还有其他的两个站,一上,都没法访问,其中一个java站报错:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
我就纳闷了,这几个站平均一天也就那么几十个人访问,怎么可能连接数过多,难道被人攻击了?
于是上Linode后台一瞅,流量,CPU,IO都没啥异常啊,那能有啥问题!
一怒之下,重启了mysql……发现还是不行,不过这次报错变成了:
org.springframework.jdbc.UncategorizedSQLException:
### Error querying database. Cause: java.sql.SQLException: Got error 28 from storage engine
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: java.sql.SQLException: Got error 28 from storage engine
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1030]; Got error 28 from storage engine; nested exception is java.sql.SQLException: Got error 28 from storage engine
搜索之,说是磁盘空间不足导致的……
我信了你的邪,总共24G的空间,才放了三个小站,怎么呢可能空间不足……
ssh上去查看了一把,当时我就震惊了!神马玩意耗了我24个G……联想到mysql的报错,到mysql目录下一查,果然发现一堆奇怪的东西……
继续搜索之,说这些都是mysql的数据库操作日志,数据库的操作命令,执行信息都会被存到日志里来,防止哪天数据库出问题了可以来查查原因啊神马的。
考虑到空间和实际项目,还是删掉吧……
果然删掉之后,所以的站都能正常访问了~
最后,为了避免再次发生这种日志撑报磁盘空间的事情,直接把mysql的配置文件 my.cnf 里面的log-bin这一行注释掉,重启一下mysql就OK啦!