场景

机器A上的一个模块连接机器B上的MySQL,在实验室网络环境下正常;同样A、B两台机器,网络环境切换为与外界隔离的一个小型局域网环境,A上的模块与B上MySQL建立连接非常慢。
 
环境
SuSE 11 x64,MySQL 5.1
 
分析
A上的模块启动以后长时间无响应,不能提供服务,由于模块代码编写不具备充分的调试信息,不知道程序阻塞在什么地方。于是,使用gdb进行调试,中断程序以后,执行bt查看调用栈,程序调用mysql_real_connect与MySQL建立连接,在mysql_real_connect中调用read接收MySQL服务器返回的数据,程序就卡在read调用上。
 
在A上用telnet连接B上的MySQL 3306端口,建立网络连接正常。但是在A上用MySQL客户端访问B上的MySQL则建立MySQL连接(包括建立网络连接及进行用户认证等)的时间很长,在此期间,使用netstat查看网络连接,确认A上的MySQL客户端与B上的MySQL服务器网络连接已经建立。因此,问题应该出在客户端与MySQL服务器进行后续协议交互的过程中。
 
仔细对比了前后两个网络环境,唯一的区别在于出问题的网络环境不能访问外网,其余环境都相同,甚至连机器IP都是一样的。这时我想起以前在局域网内使用Oracle时也出现过类似的问题,当时将Oracle所在机器的DNS配置(/etc/resolv.conf)清空以后就好了。于是我出于侥幸心理,将B机器的DNS配置清空,重新启动A上的模块,一切都正常了。
 
继续分析问题,发现之前配置的DNS是外网地址,在实验室网络环境下是可以访问的,在后面的小型局域网环境不能访问。推测是MySQL在用户建立连接时使用了DNS,由于配置的DNS无法访问,MySQL会一直等待网络超时。
 
网上找了一下相关资料,发现MySQL确实会在用户登陆过程中对客户端IP进行DNS反查。为了避免这个反查过程,可以在MySQL的配置文件my.cnf中做如下配置:
[mysqld]
skip-name-resolve
如果由于DNS反查导致登陆很慢,那么在MySQL服务器上使用show processlist会看到类似如下连接:
|592|unauthenticated user|192.168.3.20:35320|NULL|Connect| |login|NULL|
|593|unauthenticated user|192.168.3.20:35321|NULL|Connect| |login|NULL|
|594|unauthenticated user|192.168.3.20:35322|NULL|Connect| |login|NULL|
 
解决方案
1. 使用skip-name-resolve指令;
2. 配置一个可访问的DNS地址,或直接清空DNS配置。
 
Reference
2. MySQL的DNS查询关闭. http://timnity.iteye.com/blog/526331

MySQL DNS反查导致连接缓慢的更多相关文章

  1. mysql反向解析导致连接缓慢

    Content 0.序 1.问题 2.原因 3.解决办法 0.序 本文主要是记录Mysql安装在 VMWARE下,本地连接Mysql速度很慢的原因及解决办法. 1.问题 本地的一个网站使用mysql数 ...

  2. MySQL连接缓慢,打开缓慢原因

    问题状况:最近由于服务器变换了网段,导致IP地址变换,变化后使用MySQL客户端连接MySQL服务器和在客户端中打开表的速度非常慢(无论表的大小),甚至连接超时,但是直接登录到服务器在本地连接MySQ ...

  3. mysql远程连接缓慢的问题

    这两天发现服务器程序启动的时候到了mysql初始连接的那一步很耗时,启动缓慢,后来发现,将连接的主机的-h参数改成localhost的时候 瞬间就完成连接了.后来在网上查到,原来是由于mysql服务器 ...

  4. Mysql连接缓慢

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)Mysql 连接缓慢. 更多讨论或者错误提交,也请移步. 最近在 Node 上进行 Mysql 操作 ...

  5. ssh 连接缓慢解决方法

    ssh 连接缓慢解决方法 摘自:https://blog.csdn.net/qq_14821541/article/details/61915589 2017年03月13日 12:00:38 所以怎样 ...

  6. 转 sqlplus/RMAN/lsnrctl 等工具连接缓慢

    AIX上sqlplus /as sysdba    rman target / 或者lsnrctl start时或者通过sqlplus system/oracle@orcl这样通过监听连接等方式来登陆 ...

  7. SQL自连接(源于推荐算法中的反查表问题)

    ”基于用户的协同过滤算法“是推荐算法的一种,这类算法强调的是:把和你有相似爱好的其他的用户的物品推荐给你. 要实现该推荐算法,就需要计算和你有交集的用户,这就要用到物品到用户的反查表. 先举个例子说明 ...

  8. [20190409]pre_page_sga=true与连接缓慢的问题.txt

    [20190409]pre_page_sga=true与连接缓慢的问题.txt --//曾经遇到11g下设置pre_page_sga=true启动缓慢的问题(没有使用hugepages).--//链接 ...

  9. MySQL—增删改查,分组,连表,limit,union,alter,排序,去重

    MySQL增删改查 在表格的增删改查中,查的内容是最多的,包括group by ,join,limit,union,alter,排序都是服务于查的 #sql语句数据行操作补充 #增加: #insert ...

随机推荐

  1. Docker学习--->>Docker的认识,安装,及常用命令熟悉

    Docker是什么? 在平常的软件开发中,会面临着开发不同的程序或服务需要不同的环境.而在该环境上开发完成后,想要在其他的环境上部署,则需要自己去重新部署,而Docker的出现使得这样的迁移变得容易. ...

  2. Ant 之bulid.xml详解

    ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的 ...

  3. JavaScript获取客户端IP地址

    1. 第三方接口 1) 这里提供一个搜狐接口的地址:http://pv.sohu.com/cityjson?ie=utf-8 ,将这个js引入到页面即可得到returnCitySN. 2) api.i ...

  4. Python 发展历史

    1. Python发展历史 起源 Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.然而,尽管他算得上是一位数学家,但他更 ...

  5. 阿里云ECS主机自定义进程监控

    由于业务的关系我们用的是阿里云的ECS主机,需要对业务进程需要监控,查看后发现阿里云提供自定义监控SDK,这有助于我们定制化的根据自身业务来做监控,下面我就根据业务需求来介绍一个简单的自定义监控配置 ...

  6. 1.怎样控制div中的图片居中

    答案如下: #div{ width: 100%; height: 100%; border: 1px solid #000; text-align: center;}#div img{ vertica ...

  7. python_求相邻数

    什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数 需求: 遍历inputList 所有数字,取出所有数字,判断是否有相邻数, 不相邻数字 和 相邻数字 都以 “数组”形式 ...

  8. Qt图片按原比例缩放

    1.选择图片 QString strFilePath = QFileDialog::getOpenFileName(this, tr("Select file"), QStanda ...

  9. .net core 2.0学习笔记(三):度量.net framework 迁移到.net core的工作量

    把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持.两个类库的差异性,通过人工很难识别全.好在微软的工程师们考虑到了我 ...

  10. Go语言循环判断的使用~

    Go 语言条件语句 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句. 下图展示了程序语言中条件语句的结 ...