2012-02-22 119 views
2

以下是mysql錯誤: 連接失敗:用戶'db2498'超出了'max_user_connections'資源(當前值:200)。'max_user_connections'設置爲200 - 仍然出現錯誤

我設置的my.cnf:

[mysqld] 
max_connections = 500 
max_user_connections = 200 

我設置MAX_USER_CONNECTIONS在MySQL用戶200也。我在大約10-20分鐘內就有1400人到達了該網站。每個人平均持續14秒,並且我收到了大約1400條這些消息。

我正在使用PHP/Mysql。這是數據庫類:

class DB{ 

public function __construct(){ 
    $this->conn = new mysqli($this->host,$this->user,$this->pass,$this->db); 
    /* check connection */  
} 
public function selectSomething(){ 
    /* select data & return */ 
} 
public function __destruct() 
{ 
$this->conn->close(); 
} 
} 

這是我怎麼稱呼它:

$conn = new DB(); 
$result = $conn->selectSomething(); 
/* do something */ 

$result = $conn->selectSomething(); 
/* do something */ 

$result = $conn->selectSomething(); 
/* do something */ 

的用戶是網站的平均14秒。爲什麼我得到這個錯誤?是毀滅嗎?我有數據庫封裝器設置錯誤嗎?我迷路了,技術支持幫助不大。

+0

用戶連接!=用戶 – JohnFx 2012-02-22 05:22:28

回答

3

至於你的「最大連接數」的問題,也可能是三種情況之一:

1)服務器有太多打開的連接了。一個MySQL服務器只能處理特定數量的開放連接,然後拒絕再允許,並且這個限制在服務器的所有用戶中共享。它通常設置相當高,雖然有人來有效的DoS通過使大量的連接一個MySQL服務器(見下文)

2)您的用戶帳戶具有每小時允許的連接數量有限,它可能易 - 任何進一步的連接在那個小時內將被拒絕。這是基於每個用戶設置的。

3)您的用戶帳戶的允許打開連接數量有限 - 任何進一步的連接都將被拒絕。這是基於每個用戶設置的。

閱讀您在連接嘗試中返回的錯誤消息總是很重要的,因爲在大多數情況下,這將查明失敗的確切原因。

如果您帳戶的連接限制的最大數目(場景#3),錯誤是: 代碼:

ERROR 1226 (42000): User 'mysqldba' has exceeded the 'max_user_connections' resource (current value: 1) 

其中「mysqldba」將您的用戶名,而「當前值」是此用戶允許的最大打開連接數。

如果您的帳戶有時速限制的最大連接數(場景#2),錯誤是: 代碼:

ERROR 1226 (42000): User 'mysqldba' has exceeded the 'max_connections_per_hour' resource (current value: 1) 

其中,再次,「mysqldba」將是你的用戶名, '當前值'是該用戶允許的每小時的最大連接數。

如果您收到錯誤消息(代碼1040),表明整個MySQL服務器的連接插槽已用完 - 這是我在上面提到的DoS場景。

你能做些什麼呢?從你所說的話,你沒有在這個服務器上的超級用戶權限,所以沒有什麼,除了抱怨負責該服務器的SysAdmin。他們可能增加允許的最大連接數,這可以短期解決問題,但如果其他人使用服務器正在創建數量較多的數據庫連接,則插槽會再次填滿。他們可能應該做的也是強制實施每個用戶的最大打開連接限制 - 這將阻止大量用戶堵塞服務器。在像你這樣的共享服務器的情況下,這將是最有意義的 - 「高級用戶」應該/應該擁有自己的服務器,或者可以/應該支付以增加其最大的開放連接。

+0

我可以SU。這是我的盒子。這裏是錯誤:警告:mysqli :: mysqli()[mysqli.mysqli]:(42000/1226):用戶'user3903'已超過'max_user_connections'資源(當前值:200)。我有權修改這些值。我改變了my.cnf。它是我的數據庫包裝?連接是否關閉? – 2012-02-24 03:52:37

+1

我懷疑連接沒有正確關閉。你可以嘗試使用持久連接,即mysql_pconnect(...),有時mysqli包裝不能正常工作... – bodi0 2012-02-24 08:07:24

+0

@ bodi0已經死了。確保在完成查詢後使用mysqli :: close。 – zmonteca 2015-02-09 20:08:40

相關問題