2016-02-11 15 views
0

我有一個網站,我需要從MySQL獲取數據並將它們顯示給用戶。防止MySQL從最大用戶連接狀態下降

每次用戶刷新頁面時,mysql都會連接,獲取som數據,返回並關閉連接(用戶可以是最新的)。 它有一個問題,因爲我厭倦了我的網站上的垃圾郵件刷新,並且在小時內連接25.000個mysql連接之後,我的頁面將關閉一個小時,因爲我的託管服務提供商的mysql_max_connection等於25.000。 我只有一個MySQL帳戶,所以我不能切換到任何其他帳戶。

我正在考慮使用PDO :: ATTR_PERSISTENT來建立持久連接,但當用戶回來時沒有mysql_reset,所以我認爲使用它不是一個好主意。

我想問一下,是否有任何方法來阻止它在PDO或任何其他PHP/MySQL功能,或者它是如何通過一些商業網站,如Facebook等。 謝謝你的建議。

+1

如果您擔心DOS攻擊而不是正常使用fail2ban或類似的東西可能是更好的選擇。 –

+0

它是如何由Facebook等商業網站完成的?那麼,根據[本文](http://www.datacenterknowledge.com/the-facebook-data-center-faq-page-2/),早在2010年,他們就已經擁有了最大的MySQL集羣之一這個星球以及總共大約60,000臺服務器(儘管其中大多數是網絡服務器;文章中沒有數據庫服務器的分割)。 –

+0

我認爲這更多的是關於一般的DDoS預防,因此太廣泛了(有如果沒有,我會傾向於說這不是真正的編程,而是與服務器相關的問題,因爲代碼之外必須有一種機制來切斷不需要的連接。 – Smar

回答

1

您可以限制每個用戶每小時使用在MySQL: LINK SECURITY MYSQL

然而,大多數Web應用程序使用一個單一的MySQL用戶名進行的所有應用程序的用戶。所以這可能只是遏制你的整個網站。

addslashes函數不是防止SQL注入的正確解決方案。每個MySQL API都包含一個更合適的轉義函數,例如mysqli_real_escape_string()PDO::quote()

但更好的是使用準備好的語句和查詢參數,而不是將變量轉義和連接到SQL查詢字符串中。

如果您使用sql-injection標記檢查其他問題,可以很容易找到這些示例。其中一個最佳答案是 How can I prevent SQL-injection in PHP?

請檢查並嘗試這些信息。祝你好運。