1. 程式人生 > >MySQL server has gone away問題解決

MySQL server has gone away問題解決

我在跑一個計劃任務時出現這個問題。

我用的aws的RDS的mysql資料庫,程式一開始初始化了資料庫,但是前部分沒有操作資料庫,都是請求外部介面,但是過了10多秒後,到了執行到資料庫的語句就報“MySQL server has gone away”

我上網查了一下說是wait_timeout引起的,以下是引用:

===============================================================

wait_timeout -- 指的是mysql在關閉一個非互動的連線之前所要等待的秒數

interactive_time -- 指的是mysql在關閉一個互動的連線之前所要等待的秒數(互動連線如mysql gui tool中的連線)

對效能的影響:

wait_timeout:

(1)如果設定大小,那麼連線關閉的很快,從而使一些持久的連線不起作用

(2)如果設定太大,容易造成連線開啟時間過長,在show processlist時,能看到太多的sleep狀態的連線,從而造成too many connections錯誤

(3)一般希望wait_timeout儘可能地低

interactive_timeout的設定將要對你的web application沒有多大的影響

=================================================================

以上引用

我RDS裡配置的wait_timeout設定的是30s,因為擔心出現太多sleep,總不能為了跑這個任務把這個給設定大吧,又沒辦法,只好試試,在程式的開始加了一句:

$sql = "set wait_timeout=24*3600";
$db->query($sql);

跑起來,驚喜的發現竟然不在報錯了,然後我再檢視wait_timeout是否改成了24*3600
mysql> show global variables like 'wait_timeout'; 

發現竟然還是30s。

這說明我在sql執行的語句不會影響到伺服器的配置,隻影響到執行的指令碼。

這樣就能兩全其美了。