现在的位置: 首页 > 综合 > 正文

centos上mysql大量unauthenticated user解决办法

2017年12月06日 ⁄ 综合 ⁄ 共 2486字 ⁄ 字号 评论关闭

 

一如前面所说的,www.blogguy.cn的服务器慢到了我无法容忍的地步,经过观察确定是mysql数据库给拖累的,这段时间要拿这mysql开刀了。

通过ssh连上去,执行一下mysql的Show Processlist;命令,发现一堆的用户名是unauthenticated user的用户在连接。以前没有注意这个情况,现在终于明白,这个就是mysql值得优化的第一步了。

就从这里开始。

 首先看看www.blogguy.cn的show processlist运行概况

mysql> show processlist;
+--------+----------------------+----------------------+----------+---------+------+-------+------------------+
| Id     | User                 | Host                 | db       | Command | Time | State | Info             |
+--------+----------------------+----------------------+----------+---------+------+-------+------------------+
| 317953 | root                 | localhost            | NULL     | Query   |    0 | NULL  | show processlist |
| 318367 | unauthenticated user | 220.181.6.184:50295 | NULL     | Connect | NULL | login | NULL             |
| 318371 | unauthenticated user | 220.181.6.184:50296 | NULL     | Connect | NULL | login | NULL             |
| 318383 | unauthenticated user | 220.181.6.184:50299 | NULL     | Connect | NULL | login | NULL             |
| 318387 | unauthenticated user | 220.181.6.184:50301 | NULL     | Connect | NULL | login | NULL             |
| 318391 | unauthenticated user | 220.181.6.184:50303 | NULL     | Connect | NULL | login | NULL             |
| 318392 | unauthenticated user | 220.181.6.184:50304 | NULL     | Connect | NULL | login | NULL             |
| 318395 | unauthenticated user | 220.181.6.184:50305 | NULL     | Connect | NULL | login | NULL             |
| 318404 | root                 | localhost            | blogguy.cn | Sleep   |    1 |       | NULL             |
| 318409 | unauthenticated user | 220.181.6.184:50309 | NULL     | Connect | NULL | login | NULL             |
+--------+----------------------+----------------------+----------+---------+------+-------+------------------+
10 rows in set (0.00 sec)

看到大量unauthenticated user了吧。

这个是因为mysql的原始特性决定的,也有人说是bug,我认为不是bug,只是mysql从历史就遗留下来的一个特征而已:mysql在接到连接请求的时候,如果收到的连接请求是ip地址的话,mysql会尝试由ip地址到DNS的反向解析,白白的浪费了资源。

解决的办法如下:

1、在my.cnf中修改,[mysqld] 行下添加  --skip-name-resolve,这是公开的优化方式

改成如下的方式,下面是我的脚本

[mysqld]
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/tmp/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
max_allowed_packet=50M
wait_timeout=2880000
interactive_timeout = 2880000
max_connections=2000
skip-name-resolve
[mysql.server]
user=mysql
#basedir=/var/lib
basedir=/usr/local/blogguy.cn/mysql

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

如果配置文件中有set-variable 这样的参数,后面可以用--skip-name-resolve的方式

2、修改/etc/hosts文件,把相应的主机名,ip等信息写道hosts文件中,这个不用细说

重启mysql试试看,是不是就没有那么多unauthenticated user了呢?

抱歉!评论已关闭.