mysql中出现大理unauthenticated user的解决方法
mysql中出现大理unauthenticated user的解决方法
半夜醒了,睡不着就上网看看,一看不要紧,群里都炸了锅了,官网无法访问,断了都快一小时了,我考~~ 更不幸手机不知道啥时候停机了,靠,得亏哥们半夜醒了,不然明天去了公司还不惨了~~
查了查原因,问题出在数据库上,出现了大量的unauthenticated user线程,导致数据库不响应了:
364 | unauthenticated user | xxx.xxx.xxx.xxx:63249 | NULL | Connect | | login | NULL |
365 | unauthenticated user | xxx.xxx.xxx.xxx:56768 | NULL | Connect | | login | NULL |
366 | unauthenticated user | xxx.xxx.xxx.xxx:54127 | NULL | Connect | | login | NULL |
367 | unauthenticated user | xxx.xxx.xxx.xxx:51060 | NULL | Connect | | login | NULL |
手册上有解释:unauthenticated user refers to a thread that has become associated with a client connection but for which authentication of the client user has not yet been done。大概意思是:有一个线程在处理客户端的连接,但是该客户端还没通过用户验证。
导致原因可能是Mysql在做DNS反向解析,解决办法:1 可以在hosts文件中添加 hosts记录 2 在配置文件mysql.cnf添加skip-name-resolve ,重启mysql ,不启用DNS反向解析。
用上面的方法搞定。
最近数据库经常出现异常停顿和阻塞,通过show processlist发现大量类似如下的连接:
592|unauthenticated user|192.168.3.20:35320|NULL|Connect| |login|NULL|
593|unauthenticated user|192.168.3.20:35321|NULL|Connect| |login|NULL|
594|unauthenticated user|192.168.3.20:35322|NULL|Connect| |login|NULL|
google后发现和域名解析有关系。
不管连接的方式是经过hosts或是IP,mysql都会对DNS做反查
mysql尝试反查IP->DNS,由于反查解析过慢或出问题,无法应对快速多量的查询
3种解决方法(前2种解决方法的缺点是不能再使用主机名,而要使用IP地址):
在启动参数中添加--skip-name-resolve,关闭反向域名解析功能
在my.cnf的[mysqld]一节中增加skip-name-resolve
在/etc/hosts文件中添加对应的host记录
考虑目前情况,使用了第2种方法