mysql 無法串連問題的定位和修複過程分享

來源:互聯網
上載者:User

定位結果如下:

客戶環境:
windows server 2003 r2 standard edition sp2
mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)
apache 2.2
瑞星
webshield用戶端1.08

問題已複現。可以最佳化,無法確定是webshield導致的。

搭建環境:
windows server 2003 r2 standard edition sp2
mysql 5.0.18 for win32
apache-2.2.21-win32-x86-no_ssl
php-5.2.17-win32-vc6-x86
瑞星23.00.50.25

搭建環境過程中遇到的幾個問題:

在下載apache與php時,請注意apache與php匹配問題。

a)PHP5.3有VC6與VC9版本,應選擇VC6版本。原因如下:

i. VC6版本是使用Visual Studio 6編譯器編譯的,如果你的PHP是用Apache來架設的,那你就選擇VC6版本。
ii. VC9版本是使用Visual Studio 2008編譯器編譯的,如果你的PHP是用IIS來架設的,那你就選擇VC9版本。

b)PHP5.3的Thread Safe和Non Thread Safe版本。Apache no_ssl版應與php Thread Safe版搭配。若與Non Thread Safe搭配,apache啟動出錯:“Apache is running a threaded MPM,but your PHP Modle is not compiled to be threadsafe. You need to recompile PHP.”

i. Thread Safe是安全執行緒,執行時會進行線程(Thread)安全檢查,以防止有新要求就啟動新線程的CGI執行方式而耗盡系統資源。ISAPI執行方式是以DLL動態庫的形式使用,可以在被使用者請求後執行,在處理完一個使用者請求後不會馬上消失,所以需要進行安全執行緒檢查,這樣來提高程式的執行效率,所以如果是以ISAPI來執行PHP,建議選擇Thread Safe版本;
ii. Non Thread Safe是非安全執行緒,在執行時不進行線程(Thread)安全檢查。FastCGI執行方式是以單一線程來執行操作,所以不需要進行線程的安全檢查,除去安全執行緒檢查的防護反而可以提高執行效率,所以,如果是以FastCGI來執行PHP,建議選擇Non Thread Safe版本。
注意apache對網站及PHP的正確配置。特別注意設定檔中LoadModule, PHPIniDir,DocumentRoot,ServerRoot,Directory,DirectoryIndex,AddType application/x-httpd-php等項的配置
安裝後 mysql 後(管理員帳號密碼:admin/admin),在PHP代碼中使用admin串連資料庫失敗,cmd執行mysql –u root -p啟用root用root可正常串連資料庫。

問題複現:

PHP最長執行時間限制。

a)php最長執行時間預設為30秒,超過30秒後被中止執行,與mysql的串連也被斷開。
b)嘗試增大此值,修改php目錄下的php.ini設定檔,將max_execution_time = 30 改為max_execution_time = 300。如果設為0,表示不限制PHP最大執行時間。
c)避免了因最長執行時間限制而導致mysql串連失敗。

網站流量大導致mysql無法串連。

a)編寫php指令碼對mysql進行測試,發現當對mysql進行頻繁的串連/斷開操作時,mysql很快出現無法串連問題(錯誤碼:10048)。當中止所有串連,2分鐘後mysql又恢複正常。若不停止串連,mysql一直無法串連。
b)嘗試從兩方面最佳化:
i. 修改windows登錄機碼TcpTimedWaitDelay值為30(預設為240秒),減少此條目的值允許 TCP/IP 更快地釋放已關閉的串連, 為新串連提供更多資源。
ii. 修改windows登錄機碼MaxUserPort為53768 (該值表示從系統請求任何可用使用者連接埠時所用最大連接埠數,TCP/IP 可指定的最高連接埠號碼,預設值為5000)以處理更多的請求。

c)修改完登錄機碼後測試,mysql情況大有改善:mysql串連錯誤出現的情況大有減少,出錯後自我恢複的能力大有提高。

針對以上兩種情況,分別對安裝了webshield 1.08與未安裝webshield 1.08進行了測試,兩者測試結果一樣。

最佳化:

max_execution_time的修改:
開啟php目錄下的php.ini檔案,找到max_execution_time = 30 這行,將30修改為想要的數字。
TcpTimedWaitDelay與MaxUserPort的修改:

複製代碼 代碼如下:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:00008000
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.