开发者社区> jieforest> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MySQL 5.6关闭DNS查询

简介: MySQL 5.6关闭DNS查询 MySQL服务器的日志记录中看到如下的警告: 2015-11-09 08:37:02 1489 [Warning] IP address '104.223.72.XXX' has been resolved to the host name '104.223.72.XXX.static.quadranet.com', which resembles IPv4-address itself. 分析:104.223.72.XXX经查询,是美国的IP地址,国内有XX防火墙阻拦,DNS解析不了很正常。
+关注继续查看

MySQL 5.6关闭DNS查询

MySQL服务器的日志记录中看到如下的警告:

2015-11-09 08:37:02 1489 [Warning] IP address '104.223.72.XXX' has been resolved to the host name '104.223.72.XXX.static.quadranet.com', which resembles IPv4-address itself. 

分析:104.223.72.XXX经查询,是美国的IP地址,国内有XX防火墙阻拦,DNS解析不了很正常。由于MySQL服务器在内存中维持了一个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服务器会使用最近最少使用算法,删除部分缓存数据。

MySQL服务器执行主机名解析使用了线程安全的gethostbyaddr_r()函数调用和gethostbyname_r()函数调用,只要操作系统支持。否则,执行查找的线程会锁定一个互斥变量,再调用gethostbyaddr()函数和gethostbyname()函数。在这种情况下,如果主机名不在缓存中,也没有别的线程能解析主机名,必须等到互斥变量被释放后才可以。

MySQL服务器使用Host缓存主要有几个目的:

1)通过缓存的IP和主机名的对应关系,避免了对于客户端的每个连接都要做DNS查询。相反,对于给定的主机,只需针对首次连接进行DNS查询。

2)Host缓存中还保护了连接过程中发生的错误信息。有些错误可能是“阻塞”信息,对于给定的客户端如果连续出现这种信息,那么服务器会阻塞来自此客户端的进一步的连接。MySQL的系统变量max_connect_errors就描述了这种情况,意思是MySQL服务器在阻塞客户端连接之前允许客户端连接错误的次数。

要解除已经被阻塞的主机,需要刷新Host缓存,执行语句:

mysql> flush hosts 

或者是在Shell环境下执行:

# mysqladmin flush-hosts 

Host缓存在MySQL中是默认开启的,要关闭Host缓存,可以在启动MySQL时添加–skip-host-cache参数选项。

要禁用DNS主机名查找,可以在启动MySQL时添加–skip-name-resolve参数选项。在这种情况下,MySQL服务器会只使用IP地址来匹配连接。如果DNS查询很慢,或者是客户端非常多,那么关闭DNS查询可以改进MySQL服务器的性能。

解决办法:

修改my.cnf配置文件,找到[mysqld]处,添加:

skip-name-resolve 

再重启MySQL服务。

证明:

mysql> show variables like "%skip%";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| skip_external_locking  | ON    |
| skip_name_resolve      | ON    |
| skip_networking        | OFF   |
| skip_show_database     | OFF   |
| slave_skip_errors      | OFF   |
| sql_slave_skip_counter | 0     |
+------------------------+-------+
6 rows in set (0.00 sec) 



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql:yum安装以及开启远程连接权限
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/41343939 前言:如果你的mysql服务需要安装在centos上,centos一般情况下都可以通过yum命令进行软件的安装。
754 0
Ubuntu安装MySQL
原文: Ubuntu安装MySQL 一、验证原有主机是否已安装MySQL:     这里主要是运行sudo netstat -tap | grep mysql命令查看是否有MySQL监听的端口: $ netstat -tap | grep my...
2708 0
win2003下全自动快速安装php+mysql套件
导读:Windows 2003下一键快速安装PHP和MySql的安装包 场景:wind2003 32位 php5.2 1、下载php+mysql套件  地址1 http://pan.baidu.com/s/1gd7rCqR 地址2 http://www.
1065 0
MySQL自动化安装脚本
注:因官方MySQL下载较慢,请先自行上传mysql安装包至/usr/local/src目录 #!/bin/bash #This shell script can be used to install mysql instances automatically #Written by LiHui #Version 1.
824 0
linux ubuntu系统下MySQL的安装及设置
debian下安装MySQL:1、构建源或使用光盘镜像,当然你插入光盘也没问题2、有源时本地文件的源配置:修改/etc/apt/sources.list文件, 示例:deb http://192.168.10.73/ sid main 以上设置如果待安装的电脑可以接入Internet,均可省略。
1082 0
linux下安装mysql手记
安装mysql 下载mysql-standard-4.1.8-pc-linux-i686.tar.gz文件到目录/usr/local/下 # groupadd mysql   //添加mysql用户组 # useradd -g mysql mysql  //在mysql用户到mysql用户组 # tar –zxvf mysql-standard-4.
665 0
+关注
jieforest
原ChinaUnix博客专家,见:http://blog.chinaunix.net/uid/301743.html
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL 5.7让优化更轻松
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载