Mysql 大量 unauthenticated user
Friday, June 03, 2005, 12:29 - Apache & PHP & Mysql
近日在资料库方面,发现异常的连线状况
该狀況在 mysql 下指令 Show Processlist; 可以看到问题
该問題如下;

: 3436942 : unauthenticated user : 192.168.0.52:49607 : : Connect : : login :
: 3436943 : unauthenticated user : 192.168.0.52:49608 : : Connect : : login :

会有非常多的 unauthenticated user 尝试做登入使用 mysql 的情況
当这情况在无限制的发生时,就会造成系统的停顿

在经过多方测试,以及官方的回應下
发现这属于官方一个系统上的特殊设定,亦可称呼他为 mysql 的 bug
不管连接的方式是经过 hosts 或是 IP 的模式,他都会对 DNS 做反查
mysqld 会尝试去反查 IP -> DNS ,由于反查解析过慢,无法应对快速多量的查詢
反查是上层 ISP 所掌控,并不是我们可以解决及要求的

最简单的方法:

修改 /etc/hosts  文件,添加要访问的IP地址
172.18.9.1     xxx

此方法测试有效,另外网上还有其它方法,仅限本机连接,加入skip-name-resolve就只能本机访问了。

----------------------------------------------------------------

在知道问题的症结点后,就有了相对应的解决方法
其方法分两个步骤,第一是开启 Mysqld 的时候加入特定的参数启动
第二就是修改 mysql 的连接设定等,如下所示

启动参数; with --skip-name-resolve =>这样就可以关闭反查动作

更改 my.cnf,加强以下设置:
[mysqld]
datadir=/services/mysql/
socket=/tmp/mysql.sock
port=3306
set-variable = key_buffer_size=64M
set-variable = max_connections=1024
set-variable = interactive_timeout=30
set-variable = wait_timeout=30
set-variable = join_buffer_size=10M
set-variable = long_query_time=20
set-variable = table_cache=256
set-variable = sort_buffer=4M
set-variable = record_buffer=1M
set-variable = back_log=500

[mysqld.server]
user=mysql
basedir=/usr/local

经过以上设置和重新启动后,直到现在还没有看到一个 unauthenticated user 的情况发生
近日还是会持续的观察 Mysql 的运作情况,如有问题将会持续的禀报及解决


处理:

/usr/local/libexec/mysqld --basedir=/usr/local/ --datadir=/usr/local/var/ --user=mysql --pid-file=/usr/local/var//test.pid --skip-locking --port=3306 --socket=/tmp/mysql.sock --skip-name-resolve


/etc/my.cnf中加入skip-name-resolve

cd /etc/rc.d/init.d/

./mysqld restart

  • 相关文章

    • 无相关文章
Last modification:March 2, 2012
稀罕你