有個資料看得我雲裡霧裡的。現在用自己的言語來總結一下,寫文字,能夠加深自己的理解。也會在寫的過程中幫助自己發現理解方面瑕疵,繼續查資料求證。
長連線就可以避免每次請求都建立連線的開銷,節省了時間和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...