解决MySQL出现大量unauthenticated user的问题

转载自:http://blog.csdn.net/phphot/article/details/4134913


最近发现两台MySQL server在中午的时候忽然(很突然的那种)发飙,不断的挂掉。重启mysql也尽是失败,看mysql的errorlog,只能看到类似如下的信息:

Forcing close of thread 12232 user: 'root'

用mysqladmin 简单的监控了下mysql的情况:

mysqladmin -uroot -p******** status -i 1

发现Queries per second avg只有200左右,可以说很低,但是Threads 确非常不稳定,居然会瞬间升级200以上,一般情况下这个线程这个值都是不会高于5的个位数!

然后继续看

mysqladmin -uroot -p******** processlist

居然有大量的unauthenticated user?? 如下情况

 

+------+-----------+---------+----+---------+------+-------+------------------+
[root@app028 ~]# mysqladmin -uroot -p************ processlist
+------+-----------+---------+----+---------+------+-------+------------------+
| Id   | User                 | Host               | db | Command | Time | State | Info       |
+------+-----------+---------+----+---------+------+-------+------------------+
| 2007 | unauthenticated user | 192.168.4.29:58519 |    | Connect |     | login | |
| 2008 | unauthenticated user | 192.168.4.29:58553 |    | Connect |     | login | |
| 2009 | unauthenticated user | 192.168.4.29:58571 |    | Connect |     | login | |
| 2010 | unauthenticated user | 192.168.4.29:58577 |    | Connect |     | login | |
| 2011 | unauthenticated user | 192.168.4.29:58579 |    | Connect |     | login | |
| 2012 | unauthenticated user | 192.168.4.29:58589 |    | Connect |     | login | |

google了一下,

发现这算属MySQL的一个bug,不管连接是通过hosts还是ip的方式,MySQL都会对DNS做反查,IP到DNS,由于反查的接续速度过慢(不管是不是isp提供的dns服务器的问题或者其他原因),大量的查询就难以应付,线程不够用就使劲增加线程,但是却得不到释放,所以MySQL会“假死”。

解决的方案很简单,结束这个反查的过程,禁止任何解析。

打开mysql的配置文件(my.cnf),在[mysqld]下面增加一行:

skip-name-resolve

重新载入配置文件或者重启MySQL服务即可。


或是在运行时,增加参数:

/usr/local/mysql/bin/mysqld_safe --skip-name-resolve --user=mysql&


加 --skip-name-resolve 这么一个参数就可以,关闭mysql的dns反查功能。



更多的解决方案:

http://www.cnblogs.com/IvyCodingLife/p/3243420.html


公司的一个系统使用mysql数据库,局域网内访问时连接速度很慢,每次都要过十几秒后才能连上,只要连接上了速度正常。
在网上查了一下,发现了mysql有一个“反向解析”的问题:安装mysql后,默认 反向解析是打开的。不管你是使用域名还是
IP连接数据库,mysqld都会做一个反向解析的过程,即从 IP->dns的反查,反查的过程是很慢的而且是受ISP控制,所以一
旦ISP由于某些原因(这个也许有必要让系统工程师查查)而无法响应就会出现 前面所说的unauthenticated user,而
且mysql会出现停顿状态。解决的办法就是在my.cnf里面增加一个设置禁止mysql做任何解析的动作。
–skip-name-resolve
在做这个设置的之前一定要检查系统,将所有连接改写为IP连接,因为一旦此设置生效,mysql是无法进行域名解析的,原有的域名连接将全部失效。

 但是奇怪的是,为什么征途服务器上有这个问题,老征途也是外网为什么没有这个问题,如果真是DNS解析问题的话应该大家都有才对...后来为了再此确实是DNS反向解析造成慢的问题,在一次验证中使用了telnet命令直接去连mysql端口,发现情况和后台连接一样,telnet征途服务器的mysql端口要等5秒才返回结果,其他的服务器telnet出去马上就返回了结果并且在这次验证中发现了返回的mysql版本,于是我明白了这可能和版本有关。我们征途服务器上mysql版本是5.1.67,S2和S3的内网服务器和老征途服务器上的mysql是5.5.23和5.5.29,所以应该是mysql后来的版本对这块有处理所以5.5的版本上没发现这个情况。

网上给出的解决方法有2种:

1.在my.cnf里加上skip-name-resolve禁止dns反解析。当然会有点问题http://www.jb51.net/article/30916.htm

2.在etc/hosts文件里直接把要连接的客户端IP加到这里来写成主机这样也可以不用进行DNS反解析了。 考虑到方法1改动太大而且要重启mysql,服务器上没办法做到。所以我用了方法2测试了一下。发现速度确实上来了,于是我最终确定问题的原因就是这个。 目前就使用了方法2把发布网页的IP地址加到征途服务器上etc/hosts中去。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL服务器性能优化全文共3页,当前为第1页。MySQL服务器性能优化全文共3页,当前为第1页。 MySQL服务器性能优化全文共3页,当前为第1页。 MySQL服务器性能优化全文共3页,当前为第1页。 MySQL服务器性能优化 MySQL服务器性能优化全文共3页,当前为第2页。MySQL服务器性能优化全文共3页,当前为第2页。 MySQL服务器性能优化全文共3页,当前为第2页。 MySQL服务器性能优化全文共3页,当前为第2页。 导读:网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可能指望 MySQL 默认的系统参数能够让MySQL运行得非常顺畅。 网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可能指望 MySQL 默认的系统参数能够让 MySQL运行得非常顺畅。 通过在网络上查找资料和自己的尝试,我认为以下系统参数是比较关键的: (1)、back_log: 要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。 back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。 当你观察你的主机进程列表,发现大量 264084 " unauthenticated user " xxx.xxx.xxx.xxx " NULL " Connect " NULL " login " NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。 (2)、interactive_timeout: 服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。 (3)、key_buffer_size: 索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为402649088(400MB)。 MySQL服务器性能优化全文共3页,当前为第3页。MySQL服务器性能优化全文共3页,当前为第3页。(4)、max_connections: 允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。 MySQL服务器性能优化全文共3页,当前为第3页。 MySQL服务器性能优化全文共3页,当前为第3页。 (5)、record_buffer: 每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M) (6)、sort_buffer: 每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。 (7)、table_cache: 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。 (8)、thread_cache_size: 可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。 (10)、wait_timeout: 服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为72

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值