在一次故障过程中,登录mysql时候提示too many connections,重启数据库后,很快再次提示,show processlist查看等待进程,发现很多类似:
mysql>show processlist;
| 20681949 | unauthenticated user | 10.10.4.193:52497 | NULL | Connect | | Reading from net | NULL |
| 20681948 | unauthenticated user | 10.10.4.193:52495 | NULL | Connect | | Reading from net | NULL
开启tcpdump port 53跟踪,在其它机器上telnet ip 3306端口,可看到跟踪信息,进行了域名逆向解析。禁用skip-name-resolve后,则无逆向解析信息。为验证域名地址完全异常情况是否有问题,配置不存在的域名地址,同样不会出现跟踪信息。
故分析原因为8.8.8.8的DNS地址不稳定或者半死不活导致,如8.8.8.8彻底故障也不会出现问题。
故今后对mysql进行优化必须配置禁用DNS解析,同时应用尽量采用连接池技术(本次应用连接过多,很大部分是因为一个连接就建立一个数据库连接)