解決mysql擷取不到串連的問題

來源:互聯網
上載者:User

標籤:

  應用使用mysql的過程中。提示擷取不到資料庫連接。

 

  例如:

Connections could not be acquired from the underlying database!

  通過命令:

show status where Variable_name = ‘Connections‘

  查看mysql當前的串連,發現用得差不多了。

 

  在研發環境,很多台機器使用一個資料庫的情況,或者網路不穩定的情況, 這種問題尤其明顯。

 

  原因

  • mysql的connection是有限的。預設connection數量只有1024。
  • 一般現在的應用都使用串連池管理資料庫串連。甚至會用到讀寫分離,分庫分表。導致一個應用啟動就使用100來個資料庫連結了。
  • 如果網路抖動等原因,應用到mysql的連結被斷開了。應用會向mysql重新申請connection。然後之前的connection應用已經不再管了, 但是mysql會等待一個較長的時間,才釋放已經不再使用的connection。
     解決connection不足問題:    重啟mysql。  這不是一個好辦法,研發測試環境可以這樣子玩玩, 生產環境肯定是不可以這樣子的。    最大串連數調大。  mysql預設的串連數只有1024。把串連數調大, 可以很有效緩解這個問題。在mysql的主要設定檔my.cnf中, 找到並且修改:
max_connections        = 2048

  執行後重啟mysql。

    等待時間調小  上面說到,mysql會等待一段時間,才釋放已經無用的connection的。我們可以調小這值。   先執行命令, 查看一下等待時間:
show variables like "%timeout%"

所示:

  預設是28800秒,8小時。。。我們把這2個值調小即可。在mysql命令列中輸入(或者navicate等工具都可以):

set global wait_timeout=60;set global interactive_timeout=60;

  如果在navicate中執行上述命令, 需要關閉當前資料庫連接,才看到生效的。

     生產環境完善監控    為了避免線上出現這種問題, 對mysql監控要加上當前串連數這個項,超過一定閥值就要警示。     參考:http://stackoverflow.com/questions/4284194/terminating-idle-mysql-connectionshttp://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeouthttp://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_interactive_timeout

解決mysql擷取不到串連的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.