MySQL server has gone away問題解決
阿新 • • 發佈:2019-01-03
我在跑一個計劃任務時出現這個問題。
我用的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執行的語句不會影響到伺服器的配置,隻影響到執行的指令碼。
這樣就能兩全其美了。