2017-03-15 75 views
0

我們使用以下語法測試PHP連接到MySQL數據庫:PHP - MySQL連接超時延遲

<?php 
$link = mysqli_connect("10.0.0.6:3306", "wordpress-user", "Passw0rd", "wordpress"); 

if (!$link) { 
    echo "Error: Unable to connect to MySQL." . PHP_EOL; 
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; 
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; 
    exit; 
} 

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL; 
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL; 

mysqli_close($link); 
?> 

的問題是成功的反應是立即的,但是,失敗,響應總是22秒。是否有可能將22秒縮短到對連接失敗更快的響應?

我們已經將mysql.connect_timeout減少到了5秒,但是這樣做沒有效果,因爲超時/響應仍然是21秒。請有任何想法嗎?

PHP服務器託管在IIS上。

在此先感謝。

+0

你可以在沒有mysql端口號的情況下嘗試嗎? – Jer

+0

@ C0dekid沒有效果。試過了。謝謝:) – joebegborg07

+0

如果你連接到本地服務器,只需使用'127.0.0.1'或'localhost'。如果您連接到遠程服務器,則可能是DNS問題。 – Jer

回答

0

有連接選項,MYSQLI_OPT_CONNECT_TIMEOUT

$my = mysqli_init(); 
$my->options(MYSQLI_OPT_CONNECT_TIMEOUT, 1); 
$my->real_connect('non-existent-ip',"wordpress-user", "Passw0rd", "wordpress"); 

將使?1秒超時

+0

感謝您的作品,但我期待在服務器級別而不是在php腳本級別實現。有任何想法嗎 ? – joebegborg07

0

如果您訪問服務器上的文件,您可以編輯my.cnf(MySQL配置文件),並更改行wait_timeout = 28800interactive_timeout = 28800到您想要的值。

否則,你需要從腳本本身做到這一點。

另外,check this link,它可能會幫助你。

+0

感謝您的回覆。我有權訪問my.ini/my.cnf文件,但是我試圖從PHP服務器端而不是從MYSQL服務器端實現。原因是,如果MYSQL服務器關閉,我希望PHP服務器/腳本及時返回超時響應。請有任何想法嗎? – joebegborg07

+0

[檢查此](http://php.net/manual/en/function.set-time-limit.php)。另請閱讀[筆記](http://php.net/manual/en/function.set-time-limit.php#refsect1-function.set-time-limit-notes) – Condorcho

0

嘗試使用持久的mysql連接,如果您從php-fpm運行代碼。這幫助我們用自發的mysqli:real_connect超時。