2017-06-27 24 views
5

我一直從我的代碼得到以下錯誤:PDO連接在API超時,PHP-FPM重啓解決它

連接數據庫失敗:PDO :: __結構():12個字節的發送失敗,錯誤號= 110連接超時

此錯誤持續發生在api上。如果這個API在白天不斷被調用,這種情況不會發生。只有在api未被使用一段時間的情況下。

我可以通過執行php-fpm restart/reload解決此問題,但這不應該是解決方案。

有沒有人有任何想法如何解決這個問題?

- 編輯 -

這是用於連接到數據庫的代碼:

public function connectDatabase($allow_persistent = true) 
{ 
    $this->db = null; 

    $this->readINI(); 

    $pdo_attr = [ 
     PDO::ATTR_PERSISTENT => $allow_persistent, 
     PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8;", 
     PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true, 
    ]; 

    $this->db = new PDO("mysql:host=" . $this->db_data_dbhost . ";dbname=" . $this->db_data_dbname . ";charset=utf8", $this->db_data_username, $this->db_data_password, $pdo_attr); 

    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

要itterate更多一些,這是在兩個API的此刻使用。

  • 一個是一貫使用的客戶,從來沒有遇到這個問題
  • 二是不使用的很多客戶還沒有看到,因爲這是仍處於發展的,它只是有一些客戶進行測試。我們確實嘗試將應用程序推送到appstore,但它被這個問題擊倒。如上所述,該API最終會遇到錯誤,如果不重新啓動/重新加載php-fpm服務,將無法從此狀態中恢復。
+0

你使用持續連接嗎? – Federkun

+0

@Federkun我添加了連接到數據庫的代碼,所以如果你按照代碼 – Wouter

+0

只是不要,http://php.net/manual/en/features.persistent-connections.php – Federkun

回答

2

使用持久連接並不好(see why),不過,要解決這個你可能需要增加MySQL連接超時。

要實現此目的,請參閱my.ini的wait_timeout參數。

p.s.此外,您可以捕獲此錯誤並重新連接到數據庫。

相關問題