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) 



目录
相关文章
|
23天前
|
SQL 缓存 监控
MySQL缓存机制:查询缓存与缓冲池优化
MySQL缓存机制是提升数据库性能的关键。本文深入解析了MySQL的缓存体系,包括已弃用的查询缓存和核心的InnoDB缓冲池,帮助理解缓存优化原理。通过合理配置,可显著提升数据库性能,甚至达到10倍以上的效果。
|
25天前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
2月前
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
136 0
|
5天前
|
SQL 关系型数据库 MySQL
MySQL的查询操作语法要点
储存过程(Stored Procedures) 和 函数(Functions) : 储存过程和函数允许用户编写 SQL 脚本执行复杂任务.
79 14
|
7天前
|
SQL 关系型数据库 MySQL
MySQL的查询操作语法要点
以上概述了MySQL 中常见且重要 的几种 SQL 查询及其相关概念 这些知识点对任何希望有效利用 MySQL 进行数据库管理工作者都至关重要
46 15
|
24天前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
25天前
|
SQL 关系型数据库 MySQL
MySQL入门指南:从安装到第一个查询
本文为MySQL数据库入门指南,内容涵盖从安装配置到基础操作与SQL语法的详细教程。文章首先介绍在Windows、macOS和Linux系统中安装MySQL的步骤,并指导进行初始配置和安全设置。随后讲解数据库和表的创建与管理,包括表结构设计、字段定义和约束设置。接着系统介绍SQL语句的基本操作,如插入、查询、更新和删除数据。此外,文章还涉及高级查询技巧,包括多表连接、聚合函数和子查询的应用。通过实战案例,帮助读者掌握复杂查询与数据修改。最后附有常见问题解答和实用技巧,如数据导入导出和常用函数使用。适合初学者快速入门MySQL数据库,助力数据库技能提升。
|
1月前
|
存储 关系型数据库 MySQL
使用命令行cmd查询MySQL表结构信息技巧分享。
掌握了这些命令和技巧,您就能快速并有效地从命令行中查询MySQL表的结构信息,进而支持数据库维护、架构审查和优化等工作。
185 9
|
24天前
|
SQL 监控 关系型数据库
MySQL高级查询技巧:子查询、联接与集合操作
本文深入解析了MySQL高级查询的核心技术,包括子查询、联接和集合操作,通过实际业务场景展示了其语法、性能差异和适用场景,并提供大量可复用的代码示例,助你从SQL新手进阶为数据操作高手。
|
2月前
|
人工智能 Java 关系型数据库
Java的时间处理与Mysql的时间查询
本文总结了Java中时间与日历的常用操作,包括时间的转换、格式化、日期加减及比较,并介绍了MySQL中按天、周、月、季度和年进行时间范围查询的方法,适用于日常开发中的时间处理需求。

相关产品

  • 云解析DNS
  • 推荐镜像

    更多