公司的一个系统使用mysql数据库,局域网内访问时连接速度很慢,每次都要过十几秒后才能连上,只要连接上了速度正常。
在网上查了一下,发现了mysql有一个“反向解析”的问题:安装mysql后,默认 反向解析是打开的。不管你是使用域名还是
IP连接数据库,mysqld都会做一个反向解析的过程,即从 IP->dns的反查,反查的过程是很慢的而且是受ISP控制,所以一
旦ISP由于某些原因(这个也许有必要让系统工程师查查)而无法响应就会出现 前面所说的unauthenticated user,而
且mysql会出现停顿状态。解决的办法就是在my.cnf里面增加一个设置禁止mysql做任何解析的动作。
–skip-name-resolve
在做这个设置的之前一定要检查系统,将所有连接改写为IP连接,因为一旦此设置生效,mysql是无法进行域名解析的,原有的域名连接将全部失效。
但是奇怪的是,为什么征途服务器上有这个问题,老征途也是外网为什么没有这个问题,如果真是DNS解析问题的话应该大家都有才对...后来为了再此确实是DNS反向解析造成慢的问题,在一次验证中使用了telnet命令直接去连mysql端口,发现情况和后台连接一样,telnet征途服务器的mysql端口要等5秒才返回结果,其他的服务器telnet出去马上就返回了结果并且在这次验证中发现了返回的mysql版本,于是我明白了这可能和版本有关。我们征途服务器上mysql版本是5.1.67,S2和S3的内网服务器和老征途服务器上的mysql是5.5.23和5.5.29,所以应该是mysql后来的版本对这块有处理所以5.5的版本上没发现这个情况。
网上给出的解决方法有2种:
1.在my.cnf里加上skip-name-resolve禁止dns反解析。当然会有点问题http://www.jb51.net/article/30916.htm
2.在etc/hosts文件里直接把要连接的客户端IP加到这里来写成主机这样也可以不用进行DNS反解析了。 考虑到方法1改动太大而且要重启mysql,服务器上没办法做到。所以我用了方法2测试了一下。发现速度确实上来了,于是我最终确定问题的原因就是这个。 目前就使用了方法2把发布网页的IP地址加到征途服务器上etc/hosts中去。