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种方法