使用mysql的長連線

2021-09-10 22:09:49 字數 1304 閱讀 6504

有個資料看得我雲裡霧裡的。現在用自己的言語來總結一下,寫文字,能夠加深自己的理解。也會在寫的過程中幫助自己發現理解方面瑕疵,繼續查資料求證。

長連線就可以避免每次請求都建立連線的開銷,節省了時間和io消耗。

長連線是提高了效能。不過還有一些細節的問題需要解決,即mysql發現乙個鏈結長時間沒有執行查詢請求,就會自動斷掉這個連線。

具體多長時間後斷掉,有個timeout設定時間。通過sql:"show global variables like '%timeout';" 檢視。

my.conf中的

wait_timeout=2880000

interactive_timeout = 2880000

啟發:mysql server has gone away這個資訊是mysql伺服器提示出來的呢?還是php的mysql擴充套件提示出來的呢?

據判斷,肯定是應用程式伺服器報出來的(php)。想一想,如果mysql都已經接到請求了,那麼還出現什麼鏈結不上。明明都已經鏈結上了。

既然mysql伺服器都能夠接受請求,那麼還怎麼處理不過來呢。

據此判斷,這是php丟擲來的資訊。php鏈結不上mysql了。

使用mysql_ping()函式能夠檢測與mysql伺服器是不是鏈結狀態。避免出現mysql server has gone away。

每次執行查詢前,先使用mysql_ping()去檢測一下連線有沒有斷掉。如果斷掉了。重新建立一次鏈結。

具體**為:

if(mysql_ping()!=0){

//鏈結已經斷開,需要重新建立鏈結

$this->conn = mysql_connect($ip,$user_name,$password);

小缺點是:每次都要去檢測執行mysql_ping(),耗費資源。

$res = mysql_query($sql, $this->conn);

if($res===false){

if(mysql_errno($this->conn)==2006 || mysql_errno($this->conn)==2003){

//去檢測一下與mysql伺服器的鏈結是不是有效

if(mysql_ping()!=0){

//重新建立鏈結

備註:2003對應的錯誤資訊是,can't connect to mysql

2006 對應的錯誤資訊是 mysql server has gone away

如果沒有傳送心跳包,則會被資料庫伺服器斷掉這個鏈結。因為長時間沒有通訊的鏈結,要斷掉。

待完善mysql has gone away的解釋:

使用mysql的長連線

有個資料看得我雲裡霧裡的。現在用自己的言語來總結一下,寫文字,能夠加深自己的理解。也會在寫的過程中幫助自己發現理解方面瑕疵,繼續查資料求證。長連線就可以避免每次請求都建立連線的開銷,節省了時間和io消耗。長連線是提高了效能。不過還有一些細節的問題需要解決,即mysql發現乙個鏈結長時間沒有執行查詢請...

mysql 長連線 心跳 使用mysql的長連線

有個資料看得我雲裡霧裡的。現在用自己的言語來總結一下,寫文字,能夠加深自己的理解。也會在寫的過程中幫助自己發現理解方面瑕疵,繼續查資料求證。長連線就可以避免每次請求都建立連線的開銷,節省了時間和io消耗。長連線是提高了效能。不過還有一些細節的問題需要解決,即mysql發現乙個鏈結長時間沒有執行查詢請...

mysql 長連線 聊天室 mysql長連線

長連線是幹嘛的 它是做連線復用的 在openresty中的lua resty mysql 裡 connect方法去連線mysql時會去ngx lua cosocket連線池中尋找是否有可用連線 如果有就直接復用 如果沒有就與mysql建立新連線,連線成功後立即將這個連線放入ngx lua cosoc...