把mysql迁移到单独的服务器,与web服务器分离;但似乎不怎么稳定,经常无法连接,报错是连接数过多;登录到服务器上命令行连接也是无法连接。这情况很频繁,今天竟然出现了两次。之前一直是重启mysql解决问题,但如此频繁的故障,就有十分的必要去查找原因了。
在服务器上命令行登录,mysql -uroot -upassword,把密码写到命令行里,不用每次再输入,按ctrl+p 然后回车,尝试N次,终于登录进去了;连接数过多,终究还是可以找到空子进去的。赶快查看并保留运行状态的重要参数:
show variables;
show status;
show processlist;
好家伙,这么多连接:
| 10520 | unauthenticated user | 192.168.0.109:41063 | NULL | Connect | NULL | login | NULL | | 10521 | unauthenticated user | 192.168.0.109:41065 | NULL | Connect | NULL | login | NULL | | 10522 | unauthenticated user | 192.168.0.109:41067 | NULL | Connect | NULL | login | NULL | | 10523 | unauthenticated user | 192.168.0.109:41068 | NULL | Connect | NULL | login | NULL | | 10524 | unauthenticated user | 192.168.0.109:41069 | NULL | Connect | NULL | login | NULL | | 10525 | unauthenticated user | 192.168.0.109:41070 | NULL | Connect | NULL | login | NULL | | 10526 | unauthenticated user | 192.168.0.109:41071 | NULL | Connect | NULL | login | NULL |
如些上千行。先不管,这里肯定是问题突破口。
set global max_connections=4000;
增加允许的最大连接数,先让前台网站可以正常工作。
回过头google :mysql unauthenticated user
果然,遇到此类问题的人很多,问题在于mysql的反向ip地址解析,配置参数里加上skip-name-resolve就可以。
总结一下原因,大概如下:
因为mysql默认会根据客户端的ip地址反向解析,用于用户登录授权之用。不过正常情况下,很少会有人这样用。ip地址反向解析是很慢的,尤其是高负荷的mysql,每秒种几百次甚至更高的请求,这个请求压到本地的dns服务器上,dns服务器说不定会怀疑你在恶意请求,然后不理你了,然后这些登录请求就挂在那里,后面的连接还持续,然后越积越多,然后就达到mysql的最大连接数据限制了,然后新的连接就直接被拒,得到连接数过多的消息。
因为mysql配置文件使用的之前的配置文件,当时跟web同服务器,所以不存在这个问题。
这也正好解释了为什么phpMyAdmin里看mysqld状态时,有很多失败的连接,它们应该就是因反解析失败而被拒的。
延伸阅读
- mysql数据库还原出错ERROR:Unknown command '\\'解决手记
- MySQL(csv,text)数据导入到mssql方法参考
- MySQL之Explain
- mysql 删除重复记录
- MySQL函数 GROUP_CONCAT,相当有用
- mysql分区功能详细介绍,以及实例
- 远程登入MySQL出错问题原因分析及解决办法/无法远程登入MySQL数据库
- MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较
- 总结MYSQL的优化
- MySQL数据库备份和还原的常用命令
- 512M vps apache内存优化配置方案(perfork)
- MySQL下limit和join的优化
- Linux的配置与优化
- Mysql Innodb引擎优化/mysql配置参数优化
- 用mysqldumpslow分析mysql的slow query log/my.ini/my.cnf记录耗时查询日志
0 条评论。