mysql执行show processlist unauthenticated user 解决方法

一台unibilling机器前几天突然负载变重. 在top中发现cpu被大量占用. agi程序运行的很慢,并出现僵尸进程. 其实当时只有50个左右的并发呼叫. 远远达不到正常水准. 重新启动机器问题也没得到解决. 非常奇怪.

考虑到在top中看到mysqld占用的资源最多,就进入mysql控制台,运行 show processlist命令, 发现某进程的信息很特殊:

 代码如下 复制代码
User "unauthenticated user"
Command "connect"

State "reading from net"难道是黑客从internet上攻击我的机器? 显然不是, 因为Host那一列显示的是”localhost”.

没办法. 在google上一查找,竟发现若干人遇到过该问题. 也不能算是mysql的bug,因为通过更改配置文件 /etc/my.cnf即可解决.

具体地讲,在mysqld那一栏中添加 skip-name-resolve

[mysqld]

 代码如下 复制代码

skip-name-resolve

注意, skip-name-resolve可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP. 以前创建mysql用户是若用的是localhost现在则需要用127.0.0.1来代替在grant语句中执行一下添加该用户.

然后, 重新启动mysqld.

网上找到的另一些说法

发现这属于官方一个系统上的特殊设定,亦可称呼他为MySQL的bug,不管连结的的方式是经过hosts或是IP的模式,他都会对DNS做反查。MySQL会尝试去反查IP->DNS,由于反查解析过慢,无法应付快速多量的查询。

解决方式很简单:启动MySQL的时候,添加--skip-name-resolve选项,禁止域名解析,问题解决

 代码如下 复制代码

mysql >show full processlist;

发现大量 unauthenticated user 连接信息

13012 unauthenticated user x.x.x.x:2501 None Connect Reading from net

10056 unauthenticated user x.x.x.x:2805 None Connect Reading from net

10311 unauthenticated user x.x.x.x:2306 None Connect writing to net

10326  unauthenticated user x.x.x.x:2715 None Connect login

10422  unauthenticated user x.x.x.x:2811 None Connect login

查阅网上资料,主要介绍解决方法如下:
1. 在 /etc/my.cnf  通过添加 skip-name-resolve 参数,关闭mysql的dns反查询,mysql使用IP授权

2. 在 /etc/hosts 添加IP与主机名对应关系 ,检查 /etc/resovle主DNS服务.

3. 调整mysql max_connections,max_allowed_packet ,wait_timeout,interactive_timeout 参数

经确认其实上面配置大部分参数生产环境都是已经配置过,出现大量unauthenticated user 信息时表明mysql没有给这些客户端连接请求确认凭证,也就是说mysql无法确认这些连接使用的数据库
号信息,在wait_timeout之内mysql一直等待这些连接完成, 通过测试 telnet  x.x.x.x 3306
观察,在mysql数据库也会出现一条  unauthenticated user x.x.x.x:4706 None Connect
Reading from net 连接, 因此这种现象不一定就是数据库问题 ,下面这些都有可能产生这种现象

1.如果应用安全问题出现大量数据库探测,出现大量这种未经授权的连接

2.应用服务压力过大出现线程异常中断导致出现大量异常数据库连接

3.应用服务异常,导致出现大量异常数据库连接

4. MySQL 客户端连接版本问题,验证协议不兼容,尤其注意old-password验证方式

最后通过投票系统加入验证码防止刷票,减少出现非法和异常连接可能性,重启PHP服务后CPU负载恢复正常,mysql数据库unauthenticated user连接也没再出现。

http://www.111cn.net/database/mysql/42102.htm

mysql执行show processlist unauthenticated user 解决方法

时间: 2024-10-09 07:23:05

mysql执行show processlist unauthenticated user 解决方法的相关文章

mysql执行update报错1175解决方法

mysql执行update报错 update library set status=true where 1=1 Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and

php提交表单内容有单引号,mysql执行时遇见错误的解决方法。

首先看一下问题所在. "INSERT INTO tg_article( tg_username, tg_type, tg_title, tg_content, tg_date ) VALUES( '{$_clean['username']}', '{$_clean['type']}', '{$_clean['title']}', '{$_clean['content']}', NOW() ) " 大家会发现党要提交的内容还有单引号的时候,value是里面就会出现单引号套单引号,这是明显

mysql执行load_fle返回NULL的解决方法

mysql 版本: 5.7.18 问题: 在执行mysql 函数load_file时,该函数将加载指定文件的内容,存储至相应字段.如: SELECT LOAD_FILE("D:\aa.txt"); 但是执行时总是返回为空.各种斜线都尝试了. 经过查阅资料得:https://segmentfault.com/a/1190000009333563 mysql 新版本下secure-file-priv字段 : secure-file-priv参数是用来限制LOAD DATA, SELECT

Mysql的“Table 'mysql.servers' doesn't exist”的解决方法

安装MYSQL后,又一次系统出现问题了,于是我查看mysql的错误日志,竟发现Table 'mysql.servers' doesn't exist问题的错误, 虽然与我的问题无关,但这个问题还是引起我的注意. 分析看是缺少mysql.servers这个表. 后上网寻找解决办法,发现解决这个问题有两个方法: 解决方法一,自己建立这张表. use mysql;CREATE TABLE `servers` (`Server_name` char(64) NOT NULL,`Host` char(64

centos里mysql无法用localhost连接的解决方法

遇到这个问题可能是由于我未安装在默认路径导致的 解决方法: 由于mysql 默认的mysql.sock 是在/var/lib/mysql/mysql.sock,但linux系统总是去/tmp/mysql.sock查找,所以会报错 [[email protected] ~]# find / -name mysql.sock/var/lib/mysql/mysql.sock 1.直接指定mysql通道 [[email protected] ~]# mysql --socket=/var/lib/my

Adobe Dreamweaver CC MySQL连接 报404错误的解决方法

Adobe Dreamweaver CC MySQL连接时总报404报错,并给以下两个提示: 1) 在该服务器机器上没有测试服务器运行. 2) 为该站点指定的测试服务器没有映射到http://localhost/_mmServerScripts/MMHTTPDB.phpURL.请确认url前缀映射到了你站点的根上. 网上翻了一堆网站,折腾了两三天,发现可以按如下方法解决: 1)首先要在http://localhost/security/index.php配置mysql的访问密码(我用的是XAMP

LIGHTSWITCH 连接 MYSQL,中文字符不能保存----解决方法。

使用:dotConnect for MySQL () 作为 数据库连接的PROVIDER ,  在 LIGHTSWITCH 中 引用外部的MYSQL 数据源. http://www.devart.com/dotconnect/mysql/      也有  postgre LS 项目没有使用:中文 ,而是使用 EN  产生?  后来修改了.只是 没有进一步测试. LIGHTSWITCH 连接 MYSQL,中文字符输入时,出现不能保存. 1) 检查 MYSQL 数据库及表.字段定义 ,都是:UTF

关于php读mysql数据库时出现乱码的解决方法

关于php读mysql数据库时出现乱码的解决方法 php读mysql时,有以下几个地方涉及到了字符集. 1.建立数据库表时指定数据库表的字符集.例如 create table tablename ( id int not null auto_increment, title varchar(20) not null, primary key ('id') )DEFAULT CHARSET =UTF8; 复制代码 2. mysql的字符集 mysql中有三个重要的变量,character_set_

SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints using (SqlBulkCopy bulkCopy = new SqlBulkCopy(GlobalString.ConnectionString, SqlBulkCopy