• Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启


    中午刚想趴一会,不料锅从天降!!!Mysql连不上了。。。。。。。

    现象如下:

        现象1:登录mysql所在服务器,连接MySQL 成功;

        现象2:通过客户端远程连接MySQL,返回失败,如下:

    Enter password:
    ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx' (111)

       现象三:通过某些客户端可以连,就是响应极慢。

       现象四:通过客户端可以ping通,但是telnet 数据库端口失败。且无论ping还是telnet,数据库服务器均收不到数据包。

    客户端: tcpdump -nn -i eth0 icmp  和  执行ping 服务端ip的操作
    服务端: tcpdump -i br0 -nn icmp and host 客户端ip

       现象五:show processlist 有好多unauthenticated user的用户(参考参考连接所述

    mysql> show processlist;
    +-----+----------------------+---------------------+---------------------+---------+------+-------+------------------+
    | Id  | User                 | Host                | db                  | Command | Time | State | Info             |
    +-----+----------------------+---------------------+---------------------+---------+------+-------+------------------+
    |   2 | root                 | 192.168.1.60:43961  | xxx           | Sleep   |   39 |       | NULL             |
    |   7 | root                 | 192.168.1.34:41155  | xxx           | Sleep   |    7 |       | NULL             |
    |  30 | root                 | 192.168.20.7:38282  | xxx     | Sleep   |    6 |       | NULL             |
    |  44 | root                 | 192.168.20.7:38308  | xxx | Sleep   |    6 |       | NULL             |
    | 106 | root                 | 10.88.9.23:61181    | NULL                | Sleep   |   19 |       | NULL             |
    | 110 | unauthenticated user | 10.88.128.22:38648  | NULL                | Connect | NULL | login | NULL             |
    | 111 | unauthenticated user | 10.88.10.185:57430  | NULL                | Connect | NULL | login | NULL             |
    | 112 | unauthenticated user | 10.88.11.196:56473  | NULL                | Connect | NULL | login | NULL             |
    | 113 | unauthenticated user | 10.88.128.22:38650  | NULL                | Connect | NULL | login | NULL             |
    | 114 | unauthenticated user | 10.88.10.185:57439  | NULL                | Connect | NULL | login | NULL             |
    | 115 | unauthenticated user | 10.88.128.117:58555 | NULL                | Connect | NULL | login | NULL             |
    | 116 | unauthenticated user | 10.88.128.22:38653  | NULL                | Connect | NULL | login | NULL             |
    | 117 | unauthenticated user | 10.88.10.185:57444  | NULL                | Connect | NULL | login | NULL             |
    | 118 | unauthenticated user | 10.88.128.22:38655  | NULL                | Connect | NULL | login | NULL             |
    | 119 | unauthenticated user | 10.88.128.22:38657  | NULL                | Connect | NULL | login | NULL             |
    | 120 | unauthenticated user | 10.88.10.185:57453  | NULL                | Connect | NULL | login | NULL             |
    | 122 | unauthenticated user | 10.88.128.22:38659  | NULL                | Connect | NULL | login | NULL             |
    | 123 | unauthenticated user | 10.88.128.22:38661  | NULL                | Connect | NULL | login | NULL             |
    | 124 | unauthenticated user | 10.88.10.185:57458  | NULL                | Connect | NULL | login | NULL             |
    | 125 | unauthenticated user | 192.168.20.45:47091 | NULL                | Connect | NULL | login | NULL             |
    | 126 | unauthenticated user | 192.168.20.45:47092 | NULL                | Connect | NULL | login | NULL             |
    | 127 | unauthenticated user | 192.168.20.45:47093 | NULL                | Connect | NULL | login | NULL             |
    | 128 | root                 | localhost           | NULL                | Query   |    0 | NULL  | show processlist |
    | 129 | unauthenticated user | 10.88.128.22:38664  | NULL                | Connect | NULL | login | NULL             |
    +-----+----------------------+---------------------+---------------------+---------+------+-------+------------------+
    24 rows in set (0.01 sec)

    问题解决办法:

        第一步:修改mysql的my.conf配置文件,在[mysqld]模块下增加,停止mysql的域名反向解析。之后重启数据库,此项解决大多数问题

    skip-name-resolve

        第二步: 重启客户端的网卡,再次连接mysql,搞定剩下的一小部分问题。

    #service network restart
    Shutting down interface eth0:                              [  OK  ]
    Shutting down loopback interface:                          [  OK  ]
    Bringing up loopback interface:                            [  OK  ]
    Bringing up interface eth0:  Determining if ip address 10.88.128.66 is already in use for device eth0...
                                                               [  OK  ]

    结论

        1.  针对MySQL的对连接的客户端进行DNS反向解析的处理,暂不晓得本质原因。网上暂没有搜到本质信息。参考【参考连接】

        2. 网卡的问题,网管怀疑客户端的网卡自娱自乐了。。。。ping的时候压根没有走到目的地就返回了

    【参考连接】:https://segmentfault.com/a/1190000002682272

    今天早上开发那边发现mysql连接很慢,登陆到服务器上查看服务器日志都是正常的,无可疑记录,刚刚还好好的,怎么突然出现这个问题,于是登陆到mysql服务器上,查看下进程,发现有很多这样的连接:
    218 | unauthenticated user | 192.168.10.6:44500 | NULL | Connect | NULL | login | NULL
    219 | unauthenticated user | 192.168.10.6:44501 | NULL | Connect | NULL | login | NULL
    ........
    放狗,放狗。。。
    原因是由于mysql对连接的客户端进行DNS反向解析。
    有2种解决办法:
    1,把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。
    2,在 my.cnf 中加入 –skip-name-resolve 。
    对于第一种方法比较笨,也不实用,那么 skip-name-resolve 选项可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP。
    我理解mysql是这样来处理客户端解析过程的,
    1,当mysql的client连过来的时候,服务器会主动去查client的域名。
    2,首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
    3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,就进行反向解析,直到timeout。
    有一点不明白,为什么连接mysql服务器内网的ip地址也要进行DNS反向解析,而这时候DNS解析返回给mysql的是什么呢?
    望高手解答。

    如有错误,还请各位数据库大神不吝赐教。 

    谢谢

  • 相关阅读:
    practice
    C#Hello World
    Merge
    Python学习面向对象编程
    Python学习Python操作数据库
    jmeter压力测试
    Python学习基础常用模块
    Python学习Python操作excel
    Python学习网络编程
    Python学习函数
  • 原文地址:https://www.cnblogs.com/zhzhang/p/7448006.html
Copyright © 2020-2023  润新知