ThinkPHP出現General error: 2006 MySQL server has gone away的解決方案

來源:互聯網
上載者:User

標籤:log   nbsp   資料庫   ring   span   exe   rac   tin   nec   

錯誤:

#13 {main}SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
FILE: \ThinkPHP\Library\Think\Db\Driver.class.php(169)

 

原因分析:

本次錯誤提示是在cli模式運行,隔一段時間就會出現,查詢資料後發現mysql預設沒隔8個小時(2880000秒)就會斷開

 

解決方案,解決方式找了三個

方法1

  配置mysql.cnf(windows系統則是my.ini),指定wait_timeout和interactive_timeout,設定一個比較大的值,比如一年(86400*365)。

方法2

  連結後通過執行命令來指定本次連結的wait_timeout和interactive_timeout,原理跟【1】一樣,只不過這種方式隻影響本次連結,方式【1】會影響所有連結。

  但是thinkphp已經封裝好了資料庫驅動,所以不好單獨指定某一次。我的做法是判斷php_sapi,如果是cli則設定wait_timeout和interactive_timeout

// ThinkPHP\Library\Think\Db\Driver.class.php 第 105行if(PHP_SAPI == ‘cli‘){     $query = $this->linkID[$linkNum]->prepare("set session wait_timeout=31536000,interactive_timeout=31536000,net_read_timeout=10000");     $query->execute();}

方法3

既然是逾時斷開了,那我們就可以採取斷線重連的方式


// ThinkPHP\Library\Think\Db\Driver.class.php 第 105行
$this->linkID[$linkNum]->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);$this->linkID[$linkNum]->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);$this->linkID[$linkNum]->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// ThinkPHP\Library\Think\Db\Driver.class.php 第159行(query方法) 和 220行(execute方法)try {            $this->PDOStatement = $this->_linkID->prepare($str);        } catch (\PDOException $e) {            // 斷線重連            if ($e->errorInfo[1] == 2006 || $e->errorInfo[1] == 2013) {                echo "---> db reconnecting...\n";                $this->linkID = array();                $this -> _linkID = null;                $this->initConnect(false);                $this->PDOStatement = $this->_linkID->prepare($str);            }        }

 

ThinkPHP出現General error: 2006 MySQL server has gone away的解決方案

相關文章

聯繫我們

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