今天清理服务器的缓存,开始出现连接不上数据库的错误提示,重启mysql后问题依旧,通过netstat -ano | grep 3306发现出现100多条CLOSE_WAIT 连接,不清楚如何引起的以及如何解决。
         后无意中在phpmyadmin中进程里面看到出现很多unauthenticated user
mysql > show processlist;
LL | login | NULL             |
| 697 | unauthenticated user | 218.26.219.186:26944 | NULL       | Connect | NULL | login | NULL             |
| 699 | unauthenticated user | 218.204.126.130:41099 | NULL       | Connect | NULL | login | NULL             |
| 700 | unauthenticated user | 201.91.135.204:43806 | NULL       | Connect | NULL | login | NULL             |
| 701 | unauthenticated user | 218.204.126.130:41119 | NULL       | Connect | NULL | login | NULL             |
| 704 | unauthenticated user | 220.227.138.82:55339 | NULL       | Connect | NULL | login | NULL             |
| 706 | unauthenticated user | 220.227.138.82:55356 | NULL       | Connect | NULL | login | NULL             |
经网上查证,管连结的的方式是经过 hosts 或是 IP 的模式,他都会对 DNS 做反查
mysqld 会尝试去反查 IP -> dns ,由于反查解析过慢,无法应付快速多量的查询,造成mysql假死。
解决办法:
修改/etc/my.cnf文件,在 [mysqld] 行下添加skip-name-resolve(关闭反查询) ,重新启动mysql服务。
不过改了后不能通过127.0.0.1登陆mysql,只能通过localhost登陆。