远程连接MySQL很慢的解决办法

概述

之前遇到过使用Navicat远程连接mysql很慢的情况,解决办法见:http://www.884358.com/navicat-mysql-slow/
这次是Navicat可以很快连接,但是php程序连接很慢,需要10秒左右的时间。

原因

由于mysql对连接的客户端进行DNS反向解析。

解决办法

办法1:
把客户端的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。我使用的就是该办法解决了问题。

办法2:
在mysql的配置文件中加入 skip-name-resolve

解释

网上查到的解释是这样来处理客户端解析过程的:
1,当mysql的客户端连过来的时候,服务器会主动去查客户端的域名。
2,首先查找/etc/hosts文件,搜索域名和IP的对应关系。
3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,就进行反向解析,直到timeout。

所谓反向解析是这样的:
mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。

添加skip-name-resolve以后就跳过着一个过程了。

发表评论

邮箱地址不会被公开。 必填项已用*标注