mysql中的 skip-name-resolve 问题,远程首次连接mysql速度慢的解决方法:skip-name-resolve取消DNS的反向解析。

jackxiang 2013-6-6 09:50 | |

今天早上开发那边发现mysql连接很慢,登陆到服务器上查看服务器日志都是正常的,无可疑记录,刚刚还好好的,怎么突然出现这个问题,于是登陆到mysql服务器上,查看下进程,发现有很多这样的连接:
218 | unauthenticated user | 192.168.10.6:44500 | NULL  | Connect | NULL | login | NULL
219 | unauthenticated user | 192.168.10.6:44501 | NULL  | Connect | NULL | login | NULL  
........
放狗,放狗。。。
原因是由于mysql对连接的客户端进行DNS反向解析。
有2种解决办法:
1,把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。
2,在 my.cnf 中加入 –skip-name-resolve 。
对于第一种方法比较笨,也不实用,那么 skip-name-resolve 选项可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP。
我理解mysql是这样来处理客户端解析过程的,
1,当mysql的client连过来的时候,服务器会主动去查client的域名。
2,首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,就进行反向解析,直到timeout。
有一点不明白,为什么连接mysql服务器内网的ip地址也要进行DNS反向解析,而这时候DNS解析返回给mysql的是什么呢?
望高手解答。

来自:http://linux.chinaunix.net/techdoc/database/2009/05/23/1114175.shtml


mysql启用skip-name-resolve模式时出现Warning的处理办法 :
skip-name-resolve 参数的目的是不再进行反解析(ip不反解成域名),这样可以加快数据库的反应时间。
修改配置文件添加并需要重启:
[mysqld]
skip-name-resolve
添加后发现错误日志有警告信息
131127 11:09:12 [Warning] 'user' entry 'root@cvs' ignored in --skip-name-resolve mode.
131127 11:09:12 [Warning] 'user' entry '@cvs' ignored in --skip-name-resolve mode.
131127 11:09:12 [Warning] 'proxies_priv' entry '@ root@cvs' ignored in --skip-name-resolve mode

启用后,在mysql的授权表中就不能使用主机名了,只能使用IP ,出现此警告是由于mysql.user表中已经存在有相关的帐号信息。 我们把它删除就好了。
mysql>use mysql;
mysql> delete  from user where HOST='cvs';
Query OK, 2 rows affected (0.00 sec)  

然后删除表mysql.proxies_priv中和cvs类似与具体域名有关的行,方法同上。

重启MYSQL ,发现警告已经没有啦。
来自:http://blog.itpub.net/14184018/viewspace-1061224/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/6420/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2016-9-18 17:57
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]