mysql長連線和短連線的問題

2022-08-29 20:15:12 字數 2062 閱讀 6788

什麼是長連線?

其實長連線是相對於通常的短連線而說的,也就是長時間保持客戶端與服務端的連線狀態。

通常的短連線操作步驟是:

連線-》資料傳輸-》關閉連線

而長連線通常就是:

連線-》資料傳輸-》保持連線-》資料傳輸-》保持連線-》…………-》關閉連線

這就要求長連線在沒有資料通訊時,定時傳送資料報,以維持連線狀態,短連線在沒有資料傳輸時直接關閉就行了

什麼時候用長連線,短連線?

長連線主要用於在少數客戶端與服務端的頻繁通訊,因為這時候如果用短連線頻繁通訊常會發生socket出錯,並且頻繁建立socket連線也是對資源的浪費。

但是對於服務端來說,長連線也會耗費一定的資源,需要專門的執行緒(unix下可以用程序管理)來負責維護連線狀態。

總之,長連線和短連線的選擇要視情況而定。

首先,如果使用了長連線而長期沒有對資料庫進行任何操作,那麼在timeout值後,mysql server就會關閉此連線,而客戶端在執行查詢的時候就會得到乙個類似於「mysql server has gone away「這樣的錯誤。

在使用mysql_real_connect連線資料庫之後,再使用mysql_options( &mysql, mysql_opt_reconnect, … ) 來設定為自動重連。這樣當mysql連線丟失的時候,使用mysql_ping能夠自動重連資料庫。如果是在mysql 5.1.6之前,那麼則應在每次執行完real_connect 之後執行mysql_options( &mysql, mysql_opt_reconnect, … ) ,如果是mysql 5.1.6+,則在connect之前執行一次就夠了。

檢視mysql連線數

mysqladmin -uroot -p  processlist

實際的測試中我發現,當設定了mysql_opt_reconnect為1時,超時後再檢視processlist,則自動建立的連線不在列表中,但事實上連線確實建立並被使用了。

在mysql的預設設定中,如果乙個資料庫連線超過8小時沒有使用(閒置8小時),伺服器將斷開這條連線,後續在該連線上進行的查詢操作都將失敗。網路上對該問題的描述非常多。也提供了相應的解決辦法。我在這裡提一些我自己的看法。

解決辦法一:修改mysql伺服器的配置引數

道理非常簡單,mysql的預設設定是在資料庫連線超過8小時沒有使用後將其斷開,如果我們將這個時間改成更大的數值,那麼連線超時所需的時間就會更長,也就意味著更不容易超時。網路上提供的修改方法一般是修改/etc/my.cnf,在這個檔案中新增一行wait_timeout=你需要設定的超時時間 。實際上有一種比較簡單的方法來修改這個引數:

首先作為超級使用者登入到mysql,注意必須是超級使用者,否則後面會提示沒有修改許可權。然後輸入

show global variables like 'wait_timeout';

| variable_name | value |

| wait_timeout | 28800 |

1 row in set (0.00 sec)

上面顯示的是預設的超時時間,即8個小時(單位是秒)。現在重新設定該引數,例如我們要將超時時間設定成10個小時,可以輸入:

set global wait_timeout=36000;

回車執行,顯示:

query ok, 0 rows affected (0.00 sec)

表示設定成功,可以重新使用show global variables like 'wait_timeout'來驗證。

這種方法比較直觀,而且設定的引數立即生效。但如果/etc/my.cnf中沒有配置,則重啟服務後,global變數會從/etc/my.cnf中讀取新的變數值。

下邊是一段示例**:

if(!mysql_real_connect(&logdb, my_hostname, my_user, my_password, my_dbname, my_port, my_sock, 0)) else

mysql長連線和短連線的問題

什麼是長連線?其實長連線是相對於通常的短連線而說的,也就是長時間保持客戶端與服務端的連線狀態。通常的短連線操作步驟是 連線 資料傳輸 關閉連線 而長連線通常就是 連線 資料傳輸 保持連線 資料傳輸 保持連線 關閉連線 這就要求長連線在沒有資料通訊時,定時傳送資料報,以維持連線狀態,短連線在沒有資料傳...

長連線和短連線

短連線是指通訊雙方有資料互動時,就建立乙個tcp連線,資料傳送完成後,則斷開此tcp連線,一般銀行都使用短連線。比如http的,只是連線 請求 關閉,過程時間較短,伺服器若是一段時間內沒有收到請求即可關閉連線。其實長連線是相對於通常的短連線而說的,也就是長時間保持客戶端與服務端的連線狀態。通常的短連...

長連線和短連線

tcp ip tcp ip是個協議組,可分為三個層次 網路層 傳輸層和應用層。在網路層有ip協議 icmp協議 arp協議 rarp協議和bootp協議。在傳輸層中有tcp協議與udp協議。在應用層有 通過tcp協議來通訊的應用層協議包括ftp http telnet smtp等 通過udp協議來通...