MysqlDNS反向解析导致连接超时过程分析(skip-name-resolve)
可以在配置文件里面禁止MySQL进行反向DNS解析,只需在my.cnf的[mysqld]段落中加入如下行即可:
skip-name-resolve(windows与linux下一样的)
设备在连接mysql时候,等待服务器的banner信息需要4s左右,影响了Mysql服务的连接速度。
通过如下方式进行验证:
1、Telnet端口验证
通过设备和虚拟机(Linux系统)分别TelnetMysql服务的端口,会出现一下现象:
设备(UAG/SCANNER):telnet后,等待Mysql的服务器端回应大概需要等10s左右。
[DPtech-Developer-Shell]telnet10.101.0.2063308
Trying10.101.0.206...
Connectedto10.101.0.206.
Escapecharacteris"^]".
E
5.0.67-community-nt-log?Hc95
虚拟机(Ubuntu):telnet后,立即得到了Mysql服务器的返回
[root]~#telnet10.101.0.2063308
Trying10.101.0.206...
Connectedto10.101.0.206.
Escapecharacteris"^]".
E
5.0.67-community-nt-log?D%(;1$]+,¢!Zdh`"?G)6r]YConnectionclosedbyforeignhost. //这里耗时很短
2、通过程序进行验证
具体源代码见附件:验证程序源代码
源代码基本上是设置了Recv超时后,建立socket连接之后接受数据,收到后计时并输出。
在设备上和虚拟机中的结果分别如下:
设备:
[DPtech-Developer-Shell]/tcpclient_mips10.101.0.13306
花费时间:19553
Recved68bytes
@
5.5.2-m2-community%uD3q`n)
虚拟机:
[root]tcp_demo#./tcpclient10.101.0.13306
花费时间:10525
Recved68bytes
@
5.5.2-m2-communitd~k~Y";B
可以发现,设备上大约比Linux服务器多耗时9s,其中10秒钟可能是recv本身超时的时间。
3、通过不同操作系统进行Telnet验证
通过Windows系统和Linux虚拟机、设备,分别通过Telnet进行连接尝试,通过抓包分析得知,只有设备的耗时比较长,其他的耗时都比较短。
抓包时发现设备中的socket建立之后,MYSQL服务器需要发送很多次的NBNS报文后,才会传输banner信息,而Linux虚拟机和Windows系统的主机在这个过程中都没有出现这个问题。
查找了一些资料,关于MYSQLNBNS报文的问题:
Mysql论坛的提问:
http://forums.mysql.com/read.php?11,250982,250982#msg-250982
该问题的答复
http://forums.mysql.com/read.php?11,250982,254683#msg-254683
从答复中来看,貌似是某些版本的问题,临时的解决方案是对Mysql服务器进行配置,不启用NamedPipes,即命名管道功能即可解决这个问题。
后经查找相关资料得知,远程连接超时可能由于Mysql默认开启了DNS反向解析的缘故,每次连接时服务器都尝试解析连接客户端的主机名,导致时间比较长。
解决方法是在服务器端的my.ini文件中,[mysqld]这个节下配置一个skip-name-resolve以关闭Mysql默认开启的DNS反向解析就可以了。
再次通过设备和虚拟机或者Windows系统进行Telnet,可以发现连接超时的现象明显不存在了。
另外通过自己写的C代码进行连接的时候也存在同样的问题,修改skip-name-resolve以后,实际上就可以发现该问题已经不存在了:
设备:
[DPtech-Developer-Shell]/tcpclient_mips10.101.0.13306
花费时间:10520
Recved68bytes
@
5.5.2-m2-community[Z44E>G)
虚拟机:
[root]tcp_demo#./tcpclient10.101.0.13306
花费时间:10521
Recved68bytes
@
5.5.2-m2-community7evE5wyx
通过虚拟机Telnet连接另外一个ip10.101.0.206时候发现速度也比较慢,消耗的时间基本上和设备中相当,可能是由于虚拟机和宿主主机之前不需要进行反向域名解析,或者说是应为系统本身就知道虚拟机IP地址(NAT模式)对应的主机名,所以不需要进行DNS反向解析,导致在虚拟机中出现了特殊情况。
最后得出结论,可能这个问题实际上和设备或者虚拟机,Linux系统、Windows系统没有多大关系,主要由于服务器的反向DNS解析导致该问题。无法从客户端途径去解决,也就是说我们设备无法处理这种情形。
相关文章
- Redis远程连接Redis客户端
- 快速的安装mysql和远程连接2021.7.23
- 第26篇:蓝队分析辅助工具箱V0.3发布,含shiro解密|cas解密|log4j2解密|冰蝎哥斯拉解密|端口连接分析等功能
- 故障分析 | OceanBase Proxy 无法连接 OBserver 集群
- 【Windows网络连接问题】无法连接到这个网络
- 关于Spring Cloud Gateway与下游服务器的连接分析
- Micapipe:一个用于多模态神经成像和连接组分析的管道
- 从Windows7连接Linux服务器 — 迎接新体验(win7访问linux)
- ;加密SQL Server 加密连接端口安全性分析(sqlserver端口)
- MySQL 监听地址设置:提高连接效率和安全性(mysql监听地址)
- Linux字符连接:如何使用特殊字符将文本或文件连接到一起(linux 字符 连接)
- WPF连接MySQL:实现令人惊叹的功能(wpf 连接mysql)
- 优化SQL Server 左连接查询性能(sqlserver左连接)
- 图C语言与MySQL数据库的连接类图分析(c 与mysql连接的类)
- 用虚拟机连接Redis的优势及入门指南(虚拟机连接redis)
- cmd无法连接mysql服务器(cmd不可连接mysql)
- Redis连接失败解决方案及原因分析(使用redis连接失败)
- 深陷Redis长连接迷局失败情景分析(redis长连接失败)
- Redis连接超时缘由分析(redis链接超时原因)
- 分析Redis连接超时的常见原因(redis连接超时原因)
- 揭秘Redis连接日志深度分析(redis连接日志怎么看)
- python连接mysql调用存储过程示例
- 用Java连接sqlserver数据库时候几个jar包的区别分析
- PHP扩展模块memcached长连接使用方法分析