如何禁止mysql的dns反查功能

如何禁止mysql的dns反查功能,第1张

SQL服务器在内存中维持了一个Host缓存,用于存储客户端的信息,包括:IP地址、Host主机名、错误信息等。对于非本地的TCP连接,MySQL服务器都会查询此缓存。对于使用本地环回地址(比如:127.0.0.1或者::1)的TCP连接、或者是使用Unix套接字文件的TCP连接、命名管道的TCP连接、共享内存的TCP连接,都不会使用Host缓存。

注:Loopback,本地环回接口(或地址),亦称回送地址。此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。在Windows系统中,采用127.0.0.1作为本地环回地址。

对于每一个新的客户端连接,MySQL服务器使用客户端的IP地址进行检索,查看客户端的主机名是否在Host缓存中。如果Host缓存中不存在,MySQL服务器会尝试解析主机名。首先,MySQL服务器会解析主机名对应的IP地址,并与客户端的原始IP地址进行比较,确保是同一个IP地址。然后MySQL服务器把这些信息写入Host缓存中。如果Host缓存已满,MySQL服务器会使用最近最少使用算法,删除部分缓存数据。

服务器放在局域网内进行测试时,数据库的访问速度还是很快。但当服务器放到外网后,数据库的访问速度就变得非常慢。后来在网上发现解决方法,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 ,由于反查解析过慢,就会无法应付过量的查询。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8645172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存