使用jdbc方式对数据进行同步时,由于设置了数据库登录超时时间是10s,结果发现有的服务器节点可以连接,有的服务器节点不能连接Mysql数据库。排查了好长原因,最后,自己写了一个jdbc的测试程序,发现正常节点连接只需要200ms左右,而其他节点却需要10400ms,而我们由于设置的10s超时时间,因此排除了网路后,终于找到原因了。
MySQL数据库对连接的客户端进行DNS反向解析。所谓反向解析是这样的:MySQL接受到连接请求后,获取的是客户端的ip,为了更好的匹配MySQL.user里的权限记录(某些是用hostname定义的)。
如果MySQL数据库设置了DNS服务器,并且客户端ip在DNS上并没有相应的hostname,那么这个过程很慢,导致连接等待。添加skip-name-resolve以后就跳过这一个过程了。
Linux下是my.cnf文件,windows下是my.ini文件,在配置文件[mysqld]下新增如下一行代码:
skip-name-resolve
然后重启MySQL服务,再次连接发现已是秒连了。这个方案的不足之处就是,以后在使用grant对用户进行授权时只能使用IP格式,而不能使用主机名称了。
举例来说,我想解决192.168.1.100远程连接MySQL服务器缓慢的问题,只需要在MySQL库所在服务器的hosts文件中新增一条记录如下:
192.168.86.100 test.com
保存退出,再次远程连接该MySQL库,同样很快。之所以说绝,是因为这样设置,你添加记录的192.168.86.100远程连接速度变快了,其他主机连接速度跟之前一样慢。该方法同样可以解决ssh远程连接某主机响应很慢的问题,原理一样。
原文:https://www.cnblogs.com/chhyan-dream/p/12355982.html