日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 短时大连接的问题_mysql长连接和短连接的问题

發(fā)布時間:2023/12/2 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 短时大连接的问题_mysql长连接和短连接的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是長連接?

其實長連接是相對于通常的短連接而說的,也就是長時間保持客戶端與服務端的連接狀態(tài)。

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

連接-》數(shù)據(jù)傳輸-》關閉連接;

而長連接通常就是:

連接-》數(shù)據(jù)傳輸-》保持連接-》數(shù)據(jù)傳輸-》保持連接-》…………-》關閉連接;

這就要求長連接在沒有數(shù)據(jù)通信時,定時發(fā)送數(shù)據(jù)包,以維持連接狀態(tài),短連接在沒有數(shù)據(jù)傳輸時直接關閉就行了

什么時候用長連接,短連接?

長連接主要用于在少數(shù)客戶端與服務端的頻繁通信,因為這時候如果用短連接頻繁通信常會發(fā)生Socket出錯,并且頻繁創(chuàng)建Socket連接也是對資源的浪費。

但是對于服務端來說,長連接也會耗費一定的資源,需要專門的線程(unix下可以用進程管理)來負責維護連接狀態(tài)。

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

首先,如果使用了長連接而長期沒有對數(shù)據(jù)庫進行任何操作,那么在timeout值后,mysql server就會關閉此連接,而客戶端在執(zhí)行查詢的時候就會得到一個類似于“MySQL server has gone away“這樣的錯誤。

在 使用mysql_real_connect連接數(shù)據(jù)庫之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 來設置為自動重連。這樣當mysql連接丟失的時候,使用mysql_ping能夠自動重連數(shù)據(jù)庫。如果是在mysql 5.1.6之前,那么則應在每次執(zhí)行完real_connect 之后執(zhí)行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) ,如果是mysql 5.1.6+,則在connect之前執(zhí)行一次就夠了。

查看mysql連接數(shù)

mysqladmin -uroot -p? processlist

實際的測試中我發(fā)現(xiàn),當設置了MYSQL_OPT_RECONNECT為1時,超時后再查看processlist,則自動建立的連接不在列表中,但事實上連接確實建立并被使用了。

在MYSQL的默認設置中,如果一個數(shù)據(jù)庫連接超過8小時沒有使用(閑置8小時),服務器將斷開這條連接,后續(xù)在該連接上進行的查詢操作都將失敗。網(wǎng)絡上對該問題的描述非常多。也提供了相應的解決辦法。我在這里提一些我自己的看法。

解決辦法一:修改MYSQL服務器的配置參數(shù)

道理非常簡單,MYSQL的默認設置是在數(shù)據(jù)庫連接超過8小時沒有使用后將其斷開,如果我們將這個時間改成更大的數(shù)值,那么連接超時所需的時間就會更長,也就意味著更不容易超時。網(wǎng)絡上提供的修改方法一般是修改/etc/my.cnf,在這個文件中添加一行wait_timeout=你需要設置的超時時間?。實際上有一種比較簡單的方法來修改這個參數(shù):

首先作為超級用戶登錄到MYSQL,注意必須是超級用戶,否則后面會提示沒有修改權限。然后輸入

show global variables like ‘wait_timeout‘;

回車執(zhí)行后顯示目前的超時時間:

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| wait_timeout | 28800 |

+---------------+-------+

1 row in set (0.00 sec)

上面顯示的是默認的超時時間,即8個小時(單位是秒)。現(xiàn)在重新設置該參數(shù),例如我們要將超時時間設置成10個小時,可以輸入:

set global wait_timeout=36000;

回車執(zhí)行,顯示:

Query OK, 0 rows affected (0.00 sec)

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

這種方法比較直觀,而且設置的參數(shù)立即生效。但如果/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)){

ast_log(LOG_ERROR, "Failed to connect to mysql database %s on %s.\n", my_dbname, my_hostname);

use_mysql = 0;

} else {

char value = 1;

mysql_options(&logdb, MYSQL_OPT_RECONNECT, (char*)&value);

use_mysql = 1;

}

總結

以上是生活随笔為你收集整理的mysql 短时大连接的问题_mysql长连接和短连接的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。