连接远程mysql数据库服务器慢的原因
星期六, 8月 15th, 2009新搭建的web server + db server 很不稳定, 访问特别慢, 而且经常连接不上。 查看运行结果, 每小时连接失败的次数有几十次,但其他参数均正常。配置怎么改都没有用, 后来发现phpmyadmin process一栏里面把web server过来的连接认为是 unauthenticated user, 于是从这个点着手, 找到了原因。
解决方法: 把 web server 的 IP 放入db server 的 /etc/hosts 里面。
综合网上各类资料, yaozer 简单总结一下原因: MySQL 默认会进行DNS解析(写明了IP也还要去解析一下,为的是得到主机名,然后可以授权该主机名而不用写明IP), 而这个DNS解析需要调用系统函数,如果这些系统函数有问题, 连接就会受影响。 把 web server 的 IP 放入db server 的 /etc/hosts 里面, 采用本地DNS解析来解决这个问题, 是最上乘之选。使用skip-name-resolve的方式后,只能全部输IP访问了,会让 localhost 没法访问。
http://www.unixresources.net/linux/clf/db/archive/00/00/34/77/347701.html#article347701 里面讨论了类似的情况,复制部分:
- 我的一台服务器RedHat7.3,上面跑了个Mysql服务。一直以来服务正常。可是昨天,我突然不能远程连接 我的数据库服务器(mysql)了。后来我把自己机器的ip加入/etc/hosts就可以,但是取消/etc/hosts IP这一行就不可以连接了,显示“lost connection to mysql server during query”
- 算起来就是前几天更新了几个包而已,glibc等,应该跟mysql没关系的。你的临时解决方法我也试过了,可以暂时顶住。
- 首先谢谢大家的关心,这个问题已经有很多人遇到,只是我们遇得比较早。总体上讲都是由于系统得某些升级造成的。我经过多方查证和收集资料,咨询。得到这个解决方案。不敢独享,还望各位给我指证,谢谢!解决方案:
在Mysql服务启动脚本/etc/rc.d/init/mysqld 里面的start里面加入”–skip-name-resolve”参数,禁止反相IP解析。问题得到解决。 - 接到redhat发布的errata通告了,原来是glibc库的问题。通告还专门指出了mysql会出错。
附: MYSQL远程连接速度慢的解决方法的相关资料
http://bbs.lihuasoft.net/thread-10904-1-1.html
http://tech.e800.com.cn/articles/2009/630/1246332746740_1.html
http://www.xishuiw.com/info/2009-3/2009-3-16-16759.htm
http://doc.linuxpk.com/66944.html
http://be-evil.org/post-40.html 该文提到了 Mysql DNS 的细节
