Mysql DNS反向解析导致连接超时过程分析反向解析导致连接超时过程分析(skip-name-
resolve)
从其它地方连接MySQL数据库的时候,有时候很慢。慢的原因有可能是MySQL进行反向DNS解析造成的,这里
简单介绍下原理,需要的朋友可以参考下
MySQL数据库收到一个网络连接后,首先拿到对方的IP地址,然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应
的主机名。用主机名在权限系统里面进行权限判断。反向DNS解析是耗费时间的,有可能让用户感觉起来很慢。甚至有的时
候,反向解析出来的主机名并没有指向这个IP地址,这时候就无法连接成功了。
可以在配置文件里面禁止MySQL进行反向DNS解析,只需在my.cnf的[mysqld]段落中加入如下行即可:
skip-name-resolve (windows与linux下一样的)
设备在连接mysql时候,等待服务器的banner信息需要4s左右,影响了Mysql服务的连接速度。
通过如下方式进行验证:
1、、Telnet端口验证端口验证
通过设备和虚拟机(Linux系统)分别Telnet Mysql服务的端口,会出现一下现象:
设备(UAG/SCANNER): telnet后,等待Mysql的服务器端回应大概需要等10s左右。
[DPtech-Developer-Shell]telnet 10.101.0.206 3308
Trying 10.101.0.206...
Connected to 10.101.0.206.
Escape character is '^]'.
E
5.0.67-community-nt-log?Hc95
虚拟机(Ubuntu):telnet后,立即得到了Mysql服务器的返回
[root]~# telnet 10.101.0.206 3308
Trying 10.101.0.206...
Connected to 10.101.0.206.
Escape character is '^]'.
E
5.0.67-community-nt-log?D%(;1$]+,¢!Zdh`'?G)6r]YConnection closed by foreign host. //这里耗时很短
2、通过程序进行验证、通过程序进行验证
具体源代码见附件:验证程序源代码
源代码基本上是设置了Recv超时后,建立socket连接之后接受数据,收到后计时并输出。
在设备上和虚拟机中的结果分别如下:
设备:
[DPtech-Developer-Shell]/tcpclient_mips 10.101.0.1 3306
花费时间:19553
Recved 68 bytes
@
5.5.2-m2-community%uD3q`n)
虚拟机:
[root]tcp_demo# ./tcpclient 10.101.0.1 3306
花费时间:10525
Recved 68 bytes
@
5.5.2-m2-communitd~k~Y";B
可以发现,设备上大约比Linux服务器多耗时9s,其中10秒钟可能是recv本身超时的时间。
3、通过不同操作系统进行、通过不同操作系统进行Telnet验证验证
通过Windows系统和Linux虚拟机、设备,分别通过Telnet进行连接尝试,通过抓包分析得知,只有设备的耗时比较长,其他
的耗时都比较短。
抓包时发现设备中的socket建立之后,MYSQL服务器需要发送很多次的NBNS报文后,才会传输banner信息,而Linux虚拟机
评论0
最新资源