设为首页 收藏本站
查看: 364|回复: 0

[经验分享] AP遠端連接MySQL Connection暴增最後造成ERROR 1040 (HY000): Too many connections

[复制链接]

尚未签到

发表于 2016-10-23 07:26:47 | 显示全部楼层 |阅读模式
PHP連接遠端mysql server最終造成ERROR 1040 (HY000): Too many connections
最近遇到一個很詭異的問題,原本的PHP系統要擴增AP Server並把MySQL移到一台獨立的Server上運作,原本認為這個task幾乎是沒有風險的,沒想到一接上線,大量的Client端的請求不僅無法消化,MySQL這邊的Connection數目竟然會很快地暴增,進而讓MySQL不斷吐Too many connections的錯誤的訊息。

但是如果去google "ERROR 1040 (HY000): Too many connections" 的話,許多文章會要你修改max_connections的數目或connection expire(逾期)的時間(例如這篇,下面的指令內容也都引用自此篇文章)。

  • 提高max_connection的數值

    • 查詢現在的max connections設定,以在任何可以query的地方執行下面的指令

      • select VARIABLE_VALUE from information_schema.GLOBAL_VARIABLES where VARIABLE_NAME=’MAX_CONNECTIONS’;


    • 查詢現在已經使用的connections數目

      • select count(*) from information_schema.PROCESSLIST;


    • 服務執行中動態更改max connections,可以在任何可以query的地方執行下面的指令 (下面的xxxx是數字,即允許的最大的connection數目),不過這種設定方式,mysql服務重啟就會失效。

      • set global max_connections =xxxx;


    • 透過修改設定檔增加max_connections (my.cnf 或是 my.ini),在 [mysqld] 的下面修改 max_connections的數值 (如果沒有的話要自己加進去,預設值是100),修改後需要重啟mysql服務才會生效

  • 修改connection的逾期時間(expire time),讓connection不會佔用過久的時間interactive_timeout(單位是秒),下面這個是動態修改的方法。靜態修改也是直接在mysqld裡面加入或修改interactive_timeout的參數就可以了。

    • set global interactive_timeout = 3600;

不過在這個case裡面去修改max_connections的參數是沒有用的,因為connection增加的速度太快,最終會灌爆MySQL的 max_connection (我曾有把max_connections改到九十萬,不過connection炸到3萬左右正個系統就癱瘓了)。
因為原本的系統不會有這樣的問題,所以開始換OS、Switch Hub怪罪所有修改過的東西,後來trial and error卻發現,如果AP改用SSH Tunnel來連MySQL就不會有相同的問題,這十分怪異。後來百思不得其解的時候突然在某篇討論串中有人提到可能的原因之一是MySQL試著去反解AP的主機名稱,而DNS又沒有設定APServer的反解的record才會出現這個問題。所以,解決的方法如下:

  • 去DNS把每台要連的主機名稱設反解
  • 設定MySQL Server的/etc/hosts (各系統hosts放置位置請參考這一篇),把要連的AP主機的主機名稱與IP設定上去。(例如:下面這樣)
      192.168.100.101 ap-server1
      192.168.100.102 ap-server2
      127.0.0.1 localhost mysql-serv
      ….


  • 修改MySQL的設定檔my.cnf (在windows上是my.ini),在[mysqld]下面多加一行skip-name-resolve讓mysql不要在去反解主機名稱
修改了主機名稱反解的問題後,connections就不再暴增了,提供上面幾個解決方法,請參考嚕,希望有幫助。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-289980-1-1.html 上篇帖子: MySQL登陆方式、数据类型、数据引擎及SQL查询语句,注意的问题. 下篇帖子: [MySQL生产环境复制故障修复] Last_IO_Errno: 1045 Last_IO_Error: error connecting to master
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表