场景

机器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. bazel 测试过程

    google的bazel如日中天,尽管我觉得make已经很好用,但是还是尝试一下,记录之. 首先,从 https://github.com/bazelbuild/bazel/releases 下载对应 ...

  2. [server]nginx 一系列命令

    h1. 启动 nginx -c /usr/local/etc/nginx/nginx.conf h1. 停止 nginx -s stop h1. reload nginx -s reload h1.

  3. Python操作Zip文件

    Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...

  4. 游走[HNOI2013]

    [题目描述] 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这 ...

  5. 常用颜色RGB、灰度值

    128/0/0       深红         255/0/0       红           255/0/255     粉红        255/153/204 玫瑰红       153 ...

  6. Python 发展历史

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

  7. java.lang.NoSuchMethodError:android.content.Context.getDrawable

    今天在开发的时候,这个代码在源码中是可以看到的,但是在android 4.3手机上面会报错,具体错误信息和代码如下: setBackgroundDrawable(context.getDrawable ...

  8. 使用IntelliJ IDEA 开发Java Web项目

  9. 纯JSP实现用户登录注册,记事本

    没有美化,没有格式,没有样式 1.JSP登陆注册 将用户注册的信息保存在application对象中,用于登录时的验证. 首页如下: 如果未登录,在  session 中找不到 currentUser ...

  10. 隐马尔可夫模型(HMM)

    隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...