天天看點

mysql關閉連接配接時間設定_如何解決MySQL連接配接逾時關閉

ping()這個函數先檢測資料連接配接是否正常,如果被關閉,整個把目前腳本的MYSQL執行個體關閉,再重新連接配接。

經 過這樣處理後,可以非常有效的解決MySQL server has gone away這樣的問題,而且不會對系統造成額外的開銷。

今天遇到類似的情景,MySQL隻是冷冷的說:MySQL server has gone away。

大概浏覽了一下,主要可能是因為以下幾種原因:

一種可能是發送的SQL語句太長,以緻超過了max_allowed_packet的大小,如果是這種原因,你隻要修改my.cnf,加大max_allowed_packet的值即可。

還有一種可能是因為某些原因導緻逾時,比如說程式中擷取資料庫連接配接時采用了Singleton的做法,雖然多次連接配接資料庫,但其實使用的都是同一個連接配接,而且程式中某兩次操作資料庫的間隔時間超過了wait_timeout(SHOW STATUS能看到此設定),那麼就可能出現問題。最簡單的處理方式就是把wait_timeout改大,當然你也可以在程式裡時不時順手mysql_ping()一下,這樣MySQL就知道它不是一個人在戰鬥。

解決MySQL server has gone away

1、應用程式(比如PHP)長時間的執行批量的MYSQL語句。最常見的就是采集或者新舊資料轉化。

解決方案:

在my.cnf檔案中添加或者修改以下兩個變量:

wait_timeout=2880000

interactive_timeout = 2880000

關于兩個變量的具體說明可以google或者看官方手冊。如果不能修改my.cnf,則可以在連接配接資料庫的時候設定CLIENT_INTERACTIVE,比如:

sql = “set interactive_timeout=24*3600”;

mysql_real_query(...)

2、執行一個SQL,但SQL語句過大或者語句中含有BLOB或者longblob字段。比如,圖檔資料的處理

解決方案:

在my.cnf檔案中添加或者修改以下變量:

max_allowed_packet = 10M(也可以設定自己需要的大小)

max_allowed_packet參數的作用是,用來控制其通信緩沖區的最大長度

22/2<12