來源:互聯網
上載者:User
關鍵字
php
yii2
console
mysql
一.問題:
現在有1個使用yii2的console執行的php指令碼,該指令碼一直在後台執行.
追蹤輸出日誌發現報:
2006 MySQL server has gone away
二.主要代碼如下:
try{Yii::$app->db->open(); if (Yii::$app->db->getIsActive()) { // 做insert操作 }}catach(\yii\db\Exception $e){ var_dump($e); // 重新串連 Yii::$app->db->close(); Yii::$app->db->open();}
三.情境:
這個php指令碼一直在後台執行,當有資料過來時,執行insert操作,無資料過來不執行insert操作。可能昨天18:00來條資料,然後insert成功,然後到第二天上午10:00才來另一條資料;也可能間隔會很小;
四.分析:
我的insert操作只是插入一個int型欄位和一個時間戳記,所以問題不會處在這個insert執行時間過長上。
由於間隔時間有可能太長,超過了mysql的wait_timeout,導致出現這個:
MySQL server has gone away
五.yii2怎麼解決?
1.本人沒有修改mysql.ini的timeout參數許可權,所以這種解決辦法不可行
2.解決思路也比較簡單:在每次Insert之前判斷db connection是否active,否則重新串連,那My Code為什麼不能解決這個問題?該怎樣寫?注意用yii2類解決
github上有相關討論,但是沒有說一個標準的解決辦法.
回複內容:
一.問題:
現在有1個使用yii2的console執行的php指令碼,該指令碼一直在後台執行.
追蹤輸出日誌發現報:
2006 MySQL server has gone away
二.主要代碼如下:
try{Yii::$app->db->open(); if (Yii::$app->db->getIsActive()) { // 做insert操作 }}catach(\yii\db\Exception $e){ var_dump($e); // 重新串連 Yii::$app->db->close(); Yii::$app->db->open();}
三.情境:
這個php指令碼一直在後台執行,當有資料過來時,執行insert操作,無資料過來不執行insert操作。可能昨天18:00來條資料,然後insert成功,然後到第二天上午10:00才來另一條資料;也可能間隔會很小;
四.分析:
我的insert操作只是插入一個int型欄位和一個時間戳記,所以問題不會處在這個insert執行時間過長上。
由於間隔時間有可能太長,超過了mysql的wait_timeout,導致出現這個:
MySQL server has gone away
五.yii2怎麼解決?
1.本人沒有修改mysql.ini的timeout參數許可權,所以這種解決辦法不可行
2.解決思路也比較簡單:在每次Insert之前判斷db connection是否active,否則重新串連,那My Code為什麼不能解決這個問題?該怎樣寫?注意用yii2類解決
github上有相關討論,但是沒有說一個標準的解決辦法.