欢迎分享,转载请注明来源:内存溢出
配置skip-name-resolve后,客户端无法连上mysql原因是由于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,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。 如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。 添加skip-name-resolve以后就跳过这个过程了。服务器放在局域网内进行测试时,数据库的访问速度还是很快。但当服务器放到外网后,数据库的访问速度就变得非常慢。后来在网上发现解决方法,my.ini里面添加[mysqld]skip-name-resolve 这样速度就快了!skip-name-resolve 选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。就MySQL本身而言,问题出在在mysql dns反解析mysql>show processlist| 20681949 | unauthenticated user | 10.10.4.193:52497 | NULL | Connect | | Reading from net | NULL | | 20681948 | unauthenticated user | 10.10.4.193:52495 | NULL | Connect | | Reading from net | NULL 发现有非常多的 unauthenticated user 尝试做登入使用 mysql 的情况 ,当这种情况无限制发生时就会造成系统十分缓慢。查阅mysql官方网站得知,这属于官方一个系统上的特殊设定,就把他当成mysql的一个bug算了,不管链接的的方式是经过 hosts 或是 IP 的模式,他都会对 DNS 做反查。mysqld 会尝试去反查 IP ->dns ,由于反查解析过慢,就会无法应付过量的查询。
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
mysql索引类型 normal方式btree 什么意思
上一篇
2023-04-18
如何判断mysql 中视图是否存在?
下一篇
2023-04-18
评论列表(0条)