2008-09-16 23 views
1

我正在使用MediaTemple的網格服務器(共享/網格託管)來運行我正在編寫的一些MySQL/PHP網站,並注意到我沒有關閉我的一個MySQL連接,導致我的網站出錯:終止共享主機上的MySQL連接?

"Too Many Connections" 

我無法登錄任何地方手動關閉連接。

是否有任何方式使用腳本或其他類型的命令關閉打開的連接?

我應該等一下嗎?

回答

1

如果您根本無法登錄到MySQL,您可能需要聯繫您的託管服務提供商以終止連接。

如果您可以使用MySQL shell,則可以使用show processlist命令查看連接,然後使用kill命令刪除連接。

不幸的是,根據我的經驗,掛起SQL連接往往會保持這種方式。

0

確保您使用PHP代碼關閉連接。另外,您可以增加/etc/my.cnf中允許的最大連接數。

max_connections=500 

最後,您可以登錄到一個MySQL提示符,鍵入show statusshow processlist查看與您的服務器的各種統計數據。

如果一切都失敗,重新啓動服務器守護進程應清除持久連接。

0

好吧,如果你永遠不能忙裏偷閒與連接,我不知道」,但如果你能偶爾忙裏偷閒,在Ruby中也將接近:

require 'mysql' 

mysql = Mysql.new(ip, user, pass) 
processlist = mysql.query("show full processlist") 
killed = 0 
processlist.each { | process | 
    mysql.query("KILL #{process[0].to_i}") 
} 
puts "#{Time.new} -- killed: #{killed} connections" 
0

如果可以訪問命令行有足夠的權限,重新啓動MySQL服務器或Apache(假設您使用Apache)服務器 - 因爲它可能會保持連接打開。在成功關閉連接之後,請確保您沒有使用來自PHP的持久連接(一般意見似乎是它不會產生任何顯着的性能增益,但它有各種問題 - 像您所經歷的那樣 - 在某些情況下 - 比如使用PostgreSQL - 它甚至會顯着減慢你的網站速度!)。

1

盲目進入終止連接並不是解決這個問題的方法。首先你需要明白爲什麼你沒有連接。您選擇的max_connections設置是否與最大/預期用戶的數量正確匹配?當你真的不需要它們時,你使用持續連接嗎?等等。