关于MySQL DNS解析探究之二:unauthenticated user

把这篇没写完的文章写完,2015年的事就不留到2016了

开启DNS解析

mysql> show variables like 'skip_name_resolve';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| skip_name_resolve | OFF   |
+-------------------+-------+

通过代码模拟用户查询请求,不断的建立连接执行sql查询,然后通过show processlist命令查看连接情况:

JAVA代码一

/**
 *  MySQL Problem DNS lead to 'unauthenticated  user'
 */
public class MysqlDNSUnauthUser {

    public static final Logger LOG = LoggerFactory
            .getLogger(MysqlDNSUnauthUser.class);
    /**
     * 执行查询操作
     * @return
     */
    public static long query() {

        long start = System.currentTimeMillis();
        Connection conn = null;
        Statement stmt = null;

        String sql = "select 1";
        try {
            // 创建新的连接
            conn = DBUtils.getConnection();
            stmt = conn.createStatement();
            stmt.executeQuery(sql);

        } catch (SQLException e) {
            LOG.error(e.getMessage(), e);
        } finally {
            DBUtils.close(conn, stmt);
        }

        long end = System.currentTimeMillis();
        return end - start;
    }

    public static void main(String[] args) {

        // 描述统计
        DescriptiveStatistics stats = new DescriptiveStatistics();
        int n = 0;
        while(true) {
            n++;
            long time = query();
            stats.addValue(time);
            if(n == 1000) break;
        }

        LOG.info(stats.toString());
    }
}

打印结果如下:

n: 1000
min: 10.0
max: 421.0
mean: 14.202000000000002
std dev: 16.242444797905648
median: 12.0
skewness: 20.270437547223214
kurtosis: 463.94461541900915

发现最大值421ms

mysql> show processlist;
+------+----------------------+-------------------+------+---------+------+-------+------------------+
| Id   | User                 | Host              | db   | Command | Time | State | Info             |
+------+----------------------+-------------------+------+---------+------+-------+------------------+
|    7 | root                 | localhost         | test | Query   |    0 | NULL  | show processlist |
| 2763 | unauthenticated user | 192.168.4.2:54804 | NULL | Connect | NULL | login | NULL             |
+------+----------------------+-------------------+------+---------+------+-------+------------------+

可以发现其中出现unauthenticated user的用户

关闭DNS解析

/etc/my.cnf中的[mysqld]节点增加skip_name_resolve,重启mysqld服务

mysql> show variables like 'skip_name_resolve';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| skip_name_resolve | ON    |
+-------------------+-------+

再次执行JAVA代码一,结果如下:

n: 1000
min: 7.0
max: 413.0
mean: 10.306999999999988
std dev: 16.131117877070835
median: 9.0
skewness: 20.655330340756084
kurtosis: 471.9124123214076

对比上一次开启DNS解析,这次的结果性能有所提高,上一次的均值是14ms,这次为10ms

mysql> show processlist;
+------+----------------------+-------------------+------+---------+------+-------+------------------+
| Id   | User                 | Host              | db   | Command | Time | State | Info             |
+------+----------------------+-------------------+------+---------+------+-------+------------------+
|    2 | root                 | localhost         | NULL | Query   |    0 | NULL  | show processlist |
| 3891 | unauthenticated user | 192.168.4.2:59502 | NULL | Connect | NULL | login | NULL             |
+------+----------------------+-------------------+------+---------+------+-------+------------------+

可以发现仍然出现了unauthenticated user的用户

目前可得出如下结论:

DNS解析确实会影响连接建立的性能,但是DNS解析开启与否,与出现unauthenticated user没有关系

猜想unauthenticated user的出现应该是连接在建立的过程中出现的临时状态

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenssy

【死磕Sharding-jdbc】---路由&执行

继续以 sharding-jdbc-example-jdbc模块中的 com.dangdang.ddframe.rdb.sharding.example.jdb...

1093
来自专栏Java帮帮-微信公众号-技术文章全总结

Jdbc知识点全整理,你值得拥有 ​(2)

1 DAO模式 DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来。DAO在数据库与业务逻辑(Service)之间。 l...

3354
来自专栏SpringBoot 核心技术

第四十四章: 基于SpringBoot & AOP完成统一资源自动查询映射

4169
来自专栏Android知识点总结

SpringBoot-07-之数据库JPA(CRUD)

1332
来自专栏乐沙弥的世界

Oracle SGA 自动管理特性(sga_target参数)

    最近有网友对Oracle SGA内存自动管理特性不是很清楚,可能是由于当时翻译的 Oracle 10g SGA 的自动化管理 比较生涩,下面依旧是针对这...

963
来自专栏Flutter&Dart

DartVM服务器开发(第十五天)--Jaguar_ORM一对一

HasBean绑定一个bean 下面我们来新建Avatar这个类,从意思上,该实体类为用户的头像

1773
来自专栏MasiMaro 的技术博文

windows 下进程池的操作

在Windows上创建进程是一件很容易的事,但是在管理上就不那么方便了,主要体现在下面几个方面: 1. 各个进程的地址空间是独立的,想要在进程间共享资源比较...

1443
来自专栏杨建荣的学习笔记

最近的几个技术问题总结和答疑(五)(r9笔记第9天)

最近收到了几个朋友的提问,我简单总结了一下。 问题1: 首先是有个朋友问到,单引号,双引号在有些场合通用,有些场合会提示错误。 我做了一个简单的测试,当然只是一...

3395
来自专栏后台架构

Sphinx源码学习笔记(一):索引创建

  因为项目开发需要在游戏内部实现玩家名称的模糊查找功能,本身直接使用Sphinx配置mysql可以直接搭建一套模糊匹配的即可支持功能的实现。

5017
来自专栏文渊之博

使用SQL Server 扩展事件来创建死锁的时间跟踪

我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话。然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪。 步骤1: 通...

2419

扫码关注云+社区

领取腾讯云代金券