场景

机器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. Hibernate学习之一对多关联

    注意事项: 1.单向一对多  只需在“一”放进行配置2.双向一对多  需要在关联双方都加以配置,而且需要在一的一方设置inverse=true 首先是实体类: TAddress.java(多的一方) ...

  2. 机器学习(3)-Tensorflow安装与测试

    安装.# Ubuntu/Linux 64-bit $ sudo apt-get install python-pip python-dev # Ubuntu/Linux 64-bit, CPU onl ...

  3. 使用pdfbox分页保存pdf为图片

    一.背景 pdfbox作为Apache开源的PDF操作工具,允许创建新的PDF文档,操作现有文档,以及从文档中提取内容的能力.Apache PDFBox还包括一些命令行实用工具.本文楼主主要介绍其中的 ...

  4. Java之IO流概述和File基本操作

    IO流图解 IO(in / out)流的分类 流向: 输入流  读取数据 输出流  写出数据 数据类型: 字节流 一个字节占8位, 以一个字节为单位读数据 八大数据类型所占字节数: byte(1), ...

  5. 快速排序算法的C语言实现

    #include<stdio.h> int partition(int a[],int low,int high) { int key=a[low]; while(low<high) ...

  6. hdu2108 Shape of HDU 极角排序判断多边形

    Problem Description 话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,"徐队"的称呼逐渐被"徐总"所取代,海东 ...

  7. 深度学习:Keras入门(二)之卷积神经网络(CNN)

    说明:这篇文章需要有一些相关的基础知识,否则看起来可能比较吃力. 1.卷积与神经元 1.1 什么是卷积? 简单来说,卷积(或内积)就是一种先把对应位置相乘然后再把结果相加的运算.(具体含义或者数学公式 ...

  8. SpringBoot基础梳理

    1.入口类和@SpringBootApplication注解: SpringBoot通常有一个名为*Application的入口类,入口类里面有main方法,我们可以通过启动main方法启动sprin ...

  9. properties文件作用以及在哪些地方用

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  10. Luogu P1001 A+B Problem

    题目描述 输入两个整数a,b,输出它们的和(|a|,|b|<=10^9). 注意 1.pascal使用integer会爆掉哦! 2.有负数哦! 3.c/c++的main函数必须是int类型,而且 ...