2014-02-19 43 views
3

我在Ubuntu Linux上運行的C++程序中遇到MySQL「連接太多」錯誤。MYSQL太多的連接錯誤不會消失

這是獲得誤差(它是返回MySQL錯誤的方法中,如果有的話)的代碼:「太多的連接」

MYSQL connect; 
mysql_init(&connect); 
if (!mysql_real_connect(&connect,SERVER,USER,PASSWORD,DATABASE,0,NULL,0)) 
{ 
    return mysql_error(&connect); 
} 

此代碼保持返回字符串

我想知道這是否是其他一些錯誤。這個程序在我發生這個錯誤之前已經工作了好幾個月。當錯誤第一次出現時,這是因爲我已經針對數千次更新/讀取運行了該程序,所以是的,很有可能我用完了可用的連接。問題是,我無法找到釋放它們的方法,如果這就是它的原因。

這是我曾嘗試:

  • FLUSH HOSTS;
  • FLUSH TABLES;
  • 重啓MYSQL
  • 重新啓動機器完全

它已經超過12小時,因爲這個錯誤第一次出現,所以如果它是連接則什麼都沒有復位/釋放。我原以爲重新啓動機器就會發布一些東西。

+0

只是一個快速評論重啓MySQL。這個問題不是要求如何編寫C++代碼。我當然會關閉連接並釋放指針。我的問題是關於如何讓MYSQL重置自身。此程序將不再運行,因爲MYSQL中存在某種內部狀態,即使在閒置超過12小時並重新啓動計算機後,它仍會認爲連接太多。 – Darren

+0

請參閱我的答案的編輯版本。 – Bitmap

+0

感謝位圖,我會嘗試增加max_connections設置。唯一的問題是,這並不能回答我如何重置連接的問題。當然,必須有一些方法來重置MySQL中的連接。即使在重新啓動之後,它是否真的永遠掛在所有連接上?那不就是說我永遠無法擺脫我的關係嗎?這部分對我來說沒有意義 – Darren

回答

3

C.5.2.7. Too many connections.

查看所有的MySQL連接。

netstat -apn | grep mysql | grep -i established 

提示

  • 構建和返回連接對象,只有當連接指針爲空或連接到數據庫是不可用的。
  • 整個會話使用一個連接池。
  • 在每個會話結束時關閉連接並釋放/清除連接指針。
  • 增加max_connections=#在/etc/mysql/my.cnf或--max_connections=#
+0

謝謝。我用這個,並確定沒有當前的連接。在進一步挖掘之後,發生的事情是有很多連接被迅速打開。我以爲是因爲這些調用正在循環中發生,連接正在及時釋放。以前的程序運行從未遇到過這種「數據補丁」,所以這是第一次出現錯誤,但是......這是程序問題,畢竟是:( – Darren

0

確保在完成操作後關閉連接。

考慮重新使用連接或連接池。