PHP学院的中学生 2019-12-07 10:10:17 2897次浏览 1条回复 0 0 0

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。
您需要登录后才可以回复。登录 | 立即注册