mysql 执行show processlist出现很多大量的 ”unauthenticated user”的解决

今天测试人员反映,一台测试环境mysql服务器查询很慢,有时登录不上, 在top中发现cpu被大量占用,系统内存还有,jave程序运行的很慢,登录服务器,

show full processlist 刷屏了很多进程,还有大量 unauthenticated user 状态的

连接如下:
| 6465371 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

| 6465372 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

| 6465373 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

| 6465374 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

| 6465375 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

| 6465376 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

| 6465377 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

| 6465378 | unauthenticated user | connecting host      | NULL               | Connect |  NULL | login        | NULL    |         0 |             0 |

看下手册中的解释是:
unauthenticated user refers to a thread that has become associated with a client connection but for which authentication of the client user has not yet been done。
即:有一个线程在处理客户端的连接,但是该客户端还没通过用户验证。

原因可能有:
1、服务器在做DNS反响解析,解决办法有2个:

a、在 hosts 中添加客户端ip,如
192.168.100.18 web-jave

b、MySQL启动参数增加一个skip-name-resolve,即不启用DNS反响解析

在配置文件里面添加skip-name-resolve,然后重启服务生效;

2、服务器的线程还处于排队状态,因此可以加大 back_log

back_log为只读参数 需要重启mysql服务
back_log定义mysql在暂时停止回答请求之前的短时间内多少请求可以被存在堆栈中。
如果期望在端时间内有很多连接,则需要增加它
在配置文件里面修改back_log的值;
换句话说,就是该值定义了TCP/IP连接侦听队列的大小
操作系统在这个队列大小上有它自己的限制,视图设定back_log高于操作系统的限制将是无效的。
在mysql中的back_log的设置取决于操作系统,
在Linux下这个参数的值不能大于系统参数tcp_max_syn_backlog的值
通过以下命令可以查看当前值:cat /proc/sys/net/ipv4/tcp_max_syn_backlog

通过以下命令进行修改sysctl -w net.ipv4.tcp_max_syn_backlog=n

3、程序上有bug或者异常连接为关闭,或者黑客攻击,导致连接数爆增。

分析原因:根据上面几点,排除了原因1,2.锁定是jave程序连接问题,看到进程里面有这个

6473469 root    192.168.10.155:47401    xxx_doc        Query   0       executing       /* mysql-connector-java-5.1.35 ( Revision: 5fb9c5849535c13917c2cf9baaece6ef9693ef27 ) */SHOW VARIABLES WHERE Variable_name =‘language‘ OR Variable_na me = ‘net_write_timeout‘ OR Variable_name = ‘interactive_timeout‘ OR Variable_name = ‘wait_timeout‘ OR Variable_name = ‘character_set_client‘ OR Variable_name = ‘character_set_connection‘ OR Variable_name = ‘character_set‘ OR Variable_na me = ‘character_set_server‘ OR Variable_name = ‘tx_isolation‘ OR Variable_name = ‘transaction_isolation‘ OR Variable_name = ‘character_set_results‘ OR Variable_name = ‘timezone‘ OR Variable_name = ‘time_zone‘ OR Variable_name = ‘system_t

ime_zone‘ OR Variable_name = ‘lower_case_table_names‘ OR Variable_name = ‘max_allowed_packet‘ OR Variable_name = ‘net_buffer_length‘ OR Variable_name = ‘sql_mode‘ OR Variable_name = ‘query_cache_type‘ OR Variable_name = ‘query_cache_size ‘ OR Variable_name = ‘license‘ OR Variable_name = ‘init_connect‘

查看进程连接数:

[email protected](none)  18:05> show status like ‘Thread%‘;

+-------------------------+-------+

| Variable_name           | Value |

+-------------------------+-------+

| Threadpool_idle_threads | 10    |

| Threadpool_threads      | 15    |

| Threads_cached          | 0     |

| Threads_connected       | 998   |   ====已经用完,(剩下2个是预留的)

| Threads_created         | 16944 |

| Threads_running         | 5     |

+-------------------------+-------+

[email protected](none) 18:05> show variables like ‘%connect%‘;

+-----------------------------------------------+-----------------+

| Variable_name                                 | Value           |

+-----------------------------------------------+-----------------+

| character_set_connection                      | utf8            |

| collation_connection                          | utf8_general_ci |

| connect_timeout                               | 20              |

| disconnect_on_expired_password                | ON              |

| extra_max_connections                         | 1               |

| init_connect                                  |                 |

| max_connect_errors                            | 10000           |

| max_connections                               | 1000             |     =====最大连接数1000

| max_user_connections                          | 1000            |

| performance_schema_session_connect_attrs_size | 512             |

+-----------------------------------------------+-----------------+

10 rows in set (0.00 sec

查看error日志:

[Warning] Too many connections

叫开发检查程序是否 有异常,发现是有人在测试jdbc连接没配置好,造成的

时间: 2024-12-16 18:24:58

mysql 执行show processlist出现很多大量的 ”unauthenticated user”的解决的相关文章

mysql执行show processlist unauthenticated user 解决方法

一台unibilling机器前几天突然负载变重. 在top中发现cpu被大量占用. agi程序运行的很慢,并出现僵尸进程. 其实当时只有50个左右的并发呼叫. 远远达不到正常水准. 重新启动机器问题也没得到解决. 非常奇怪. 考虑到在top中看到mysqld占用的资源最多,就进入mysql控制台,运行 show processlist命令, 发现某进程的信息很特殊:  代码如下 复制代码 User "unauthenticated user" Command "connect

mysql 执行状态分析 show processlist

SHOW PROCESSLIST显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到所有线程.否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程).请参见13.5.5.3节,“KILL语法”.如果您不使用FULL关键词,则只显示每个查询的前100个字符. 本语句报告TCP/IP连接的主机名称(采用host_name:client_port格式),以方便地判定哪个客户端正在做什么. 如果您得到“t

MySQL 执行计划explain详解

MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但它的输出是可以获取的最好信息,值得花时间去了解,因为可以学习到查询是如何执行的. 调用EXPLAIN 在select之前添加explain,mysql会在查询上设置一个标记,当执行查询计划时,这个标记会使其返回关于执行计划中每一步的信息,而不是执行它.它会返回一行或多行信息,显示出执行计划中的每一部

mysql执行sql及慢查询监控

[前言] mysql可以记录用户执行的sql:记录到文件.表格 mysql可以定义执行多少时间以上得sql属于慢查询,也会根据配置,记录相关信息到文件.表格 [背景说明] 公司想监控记录每天执行了哪些sql,哪些sql是慢查询,然后去优化sql [技术说明] 其实只要搞清楚了mysql怎样记录执行sql的 怎样记录慢查询的即可 接下来就是写代码去梳理成报告,我这里使用的是python [最终效果如下] [技术细节] 1.修改my.cnf #整体的效果,全局开启表和日志文件都写,但是对于gener

mysql执行insert等语句报1205 Lock wait timeout exceeded try restarting transaction

mysql执行insert等语句是报如下错误: 1205 Lock wait timeout exceeded try restarting transaction 解决办法如下: 方法一:查看当前线程,是否有存在正在执行的你相关的语句,将其KILL  show processlist;  kill pid 方法二(方法一不行再执行):重启mysql数据库  service mysqld restart 注意:重启mysql会将在执行的线程全部kill

MySQL执行计划 EXPLAIN参数

MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即可查看该查询语句的执行计划,分析执行计划是优化慢查询的重要手段.如: EXPLAIN SELECT * FROM school; DESC SELECT * FROM school; 执行结果: 执行计划参数.png 接下来对这10个参数进行简单解释: 1.id:在整个查询中SELECT的位置: 2

如何记录MySQL执行过的SQL语句

很多时候,我们需要知道 MySQL 执行过哪些 SQL 语句,比如 MySQL 被注入后,需要知道造成什么伤害等等.只要有 SQL 语句的记录,就能知道情况并作出对策.服务器是可以开启 MySQL 的 SQL 语句记录功能,从而就能间接地检测到客户端程序的行为.涞水县梁以纸业 开启方法很简单:编辑/etc/my.cnf文件,在[mysqld]节下面添加:log=/var/lib/mysql/sql_row.log行(日志的路径自己根据需要定义). [mysqld] datadir=/var/li

怎么查看mysql执行过的sql。

有些时候当程序做了更新,数据库负载突然上来,或者并发翻了几倍.这个时候如果用show full processlist; 根本看不到完全的sql.怎么才能看是哪些sql导致的呢,在网上查了资料,有一下几种方法. 1.记录慢日志: long_query_time = 1 log_slow_queries = /tmp/mysql-slow.log 2.查看bin日志 mysqlbinlog mysql-bin.000042 |grep "Table_map"> xyq.sql 3.

mysql数据库show processlist结果分析

下面我们一起来看看关于mysql数据库show processlist结果分析,希望此文章对各位同学会有所帮助. mysql> show processlist; +-–+-----+------–+ | Id | User | Host | db | Command | Time| State | Info +-–+-----+------–+ |207|root |192.168.0.2:51621 |mytest | Sleep | 5 | | NULL |208|root |192.16