zoukankan      html  css  js  c++  java
  • mysql链接错误:Lost connection to MySQL server at 'reading authorization packet', system error: 0

    在远程连接mysql的时候,连接不上,出现如下报错:
    Lost connection to MySQL server at 'reading authorization packet', system error: 0
    原因分析:
    mysql开启了DNS的反向解析功能,这样mysql对连接的客户端会进行DNS主机名查找。
    mysql处理客户端解析过程:
    1)当mysql的client连过来的时候,服务器会主动去查client的域名。
    2)首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
    3)如果hosts文件没有,则查找DNS设置,进行DNS反向解析,直到timeout连接失败。
    mysql的DNS反向解析:
    1)mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
    2)如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。

    解决方案:
    1)把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字做主机映射即可。
    2)在my.cnf配置文件中的[mysqld]区域添加skip-name-resolve,即跳过mysql连接的DNS反向解析功能,这样能很好地提高mysql性能。在这种情况下,就只能使用MySQL授权表中的IP来连接mysql服务了。
    对于第一种方法显然比较笨,也不实用!强烈推荐第二种方法,添加skip-name-resolve选项可以禁用dns解析,这样的话,就不能在mysql的授权表中使用主机名了,只能使用IP。
    --------------------------------------------------------------------------------------------------------------
    另外:
    如果在my.cnf文件中配置了bind-address地址绑定的地址(说明别的机器远程只能通过这个绑定的本机地址来连接mysql),可以将其注释掉。
    例如:
    bind-address = 127.0.0.1       //说明只能在本机连接mysql,并且通过-h 127.0.0.1或localhost,在远程是无法连接这个mysql的!
    --------------------------------------------------------------------------------------------------------------

    my.cnf配置的几个参数:
    skip-name-resolve         跳过DNS反向解析过程.(这样就不能使用主机名连接mysql了,只能使用ip连接)
    skip-grant-tables           跳过授权表(当mysql登陆密码忘记时的解决办法)
    skip-networking            跳过TCP/IP连接
    skip-host-cache            禁用主机名缓存;要想清除主机名缓存,执行FLUSH HOSTS语句或执行mysqladmin flush-hosts命令

  • 相关阅读:
    HDU 1874 畅通工程续(dijkstra)
    HDU 2112 HDU Today (map函数,dijkstra最短路径)
    HDU 2680 Choose the best route(dijkstra)
    HDU 2066 一个人的旅行(最短路径,dijkstra)
    关于测评机,编译器,我有些话想说
    测评机的优化问题 时间控制
    CF Round410 D. Mike and distribution
    数字三角形2 (取模)
    CF Round410 C. Mike and gcd problem
    CF Round 423 D. High Load 星图(最优最简构建)
  • 原文地址:https://www.cnblogs.com/aten/p/9726550.html
Copyright © 2011-2022 走看看