客户端连接mysql 自动断开_MySql连接空闲8小时自动断开的原因及连接池配置方法...
數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間查詢
非交互式超時(shí)時(shí)間,如 JDBC 程序
show global variables like 'wait_timeout';
交互式超時(shí)時(shí)間,如數(shù)據(jù)庫(kù)工具
show global variables like 'interactive_timeout';
MySQL服務(wù)器默認(rèn)的“wait_timeout”是28800秒即8小時(shí),意味著如果一個(gè)連接的空閑時(shí)間超過8個(gè)小時(shí),MySQL將自動(dòng)斷開該連接。
8小時(shí)自動(dòng)斷開引起的問題解決辦法
a.定時(shí)發(fā)送JDBC語(yǔ)句(不推薦)
b.增加 MySQL 的 wait_timeout 屬性的值 (不推薦)
修改mysql安裝目錄下的配置文件 my.ini文件(如果沒有此文件,復(fù)制“my-default.ini”文件,生成“復(fù)件 my-default.ini”文件。將“復(fù)件 my-default.ini”文件重命名成“my.ini” ),在文件中設(shè)置:
wait_timeout=31536000
interactive_timeout=31536000
這兩個(gè)參數(shù)的默認(rèn)值是8小時(shí)(60608=28800)。 注意: 1.wait_timeout的最大值只允許2147483 (24天左右),也可以使用mysql命令對(duì)這兩個(gè)屬性進(jìn)行修改。
c.配置連接池(推薦)
使用數(shù)據(jù)庫(kù)連接池 自帶功能 定時(shí)清理空閑超時(shí)的jdbc連接。
show global status like 'Thread%';
Threads_cached--- 服務(wù)器端緩存連接;
Threads_connected ---當(dāng)前打開的連接數(shù)
Threads_created ---創(chuàng)建的線程數(shù)
Threads_running---正在運(yùn)行的線程
tips:
a、配置最小連接數(shù)5,最大連接數(shù)10,則會(huì)提前創(chuàng)建5個(gè)連接,當(dāng)不夠時(shí)會(huì)再次創(chuàng)建,但不超過10個(gè)。每個(gè)連接請(qǐng)求如果未使用則會(huì)自動(dòng)回收銷毀,但會(huì)保持最小5個(gè)連接數(shù)不會(huì)銷毀。
b、數(shù)據(jù)庫(kù)連接池和線程池一樣,使用鏈表形式存儲(chǔ)(前面是少使用的,后面是最近剛被使用的)。
--獲取連接:每次獲取鏈表的頭結(jié)點(diǎn),并且刪除該頭結(jié)點(diǎn)的引用關(guān)系
--釋放連接:將該連接放入鏈表的后面
//連接數(shù)配置為2的響應(yīng)結(jié)果:
第1次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第1次查詢結(jié)果:id:5,orderName100
第2次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第2次查詢結(jié)果:id:5,orderName100
第3次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第3次查詢結(jié)果:id:5,orderName100
第4次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第4次查詢結(jié)果:id:5,orderName100
第5次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第5次查詢結(jié)果:id:5,orderName100
第6次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第6次查詢結(jié)果:id:5,orderName100
第7次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第7次查詢結(jié)果:id:5,orderName100
第8次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第8次查詢結(jié)果:id:5,orderName100
第9次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@6b09bb57
第9次查詢結(jié)果:id:5,orderName100
第10次發(fā)送連接:com.mysql.jdbc.JDBC4Connection@1d16f93d
第10次查詢結(jié)果:id:5,orderName100
通訊類型
同步調(diào)用:基于請(qǐng)求與響應(yīng);
異步調(diào)用:服務(wù)器端單獨(dú)開啟一個(gè)線程處理比較耗時(shí)間代碼;
優(yōu)點(diǎn):防止客戶端阻塞;
缺點(diǎn):
1.客戶端不能夠及時(shí)獲取到響應(yīng)結(jié)果
2.開啟單獨(dú)一個(gè)線程異步處理 有可能會(huì)非常消耗cpu資源
連接方式【MySQL JDBC長(zhǎng)連接】
長(zhǎng)連接:每次建立連接完成之后,會(huì)將該連接保存起來實(shí)現(xiàn)復(fù)用,不會(huì)頻繁創(chuàng)建連接,避免tcp三次握手和四次揮手。
優(yōu)點(diǎn):避免重復(fù)創(chuàng)建tcp三次握手和四次揮手(socket)
缺點(diǎn): 有可能浪費(fèi)我們服務(wù)器端資源;空閑超時(shí)時(shí)間
應(yīng)用場(chǎng)景:頻繁發(fā)送請(qǐng)求提高效率
短連接:每次發(fā)送請(qǐng)求完成之后,都會(huì)把連接關(guān)閉;
優(yōu)點(diǎn):避免浪費(fèi)我們服務(wù)器的資源;
缺點(diǎn): 每次建立連接的時(shí)候需要經(jīng)歷tcp三次握手,如果在頻繁發(fā)送請(qǐng)求的情況下效率有可能會(huì)降低;
數(shù)據(jù)傳輸模式
單工: 數(shù)據(jù)單向發(fā)送
半雙工: 數(shù)據(jù)雙向傳輸,但不能同時(shí)傳輸 (mysql 采用半雙工模式)
全雙工:數(shù)據(jù)雙向傳輸,可以同時(shí)傳輸
設(shè)定所接受的包的大小:
show variables like '%max_allowed_packet%';
根據(jù)情形不同,其缺省值可能是1M或者4M。
最大值是1G(1073741824),如果設(shè)置超過1G,查看最終生效結(jié)果也只有1G。
通訊協(xié)議
Unix非網(wǎng)絡(luò)協(xié)議、TCP/IP套接字
Unix非網(wǎng)絡(luò)協(xié)議:在linux 操作系統(tǒng)中客戶端和服務(wù)器端都在同一臺(tái)電腦上,客戶端訪問mysql使用Unix 協(xié)議非網(wǎng)絡(luò)協(xié)議。
TCP/IP套接字:客戶端與服務(wù)器不在同一臺(tái)電腦上 采用網(wǎng)絡(luò)方式實(shí)現(xiàn)通訊
命名管道和內(nèi)存共享
在window系統(tǒng)中客戶端和Mysql服務(wù)器在同一臺(tái)電腦上,可以使用命名管道和共享內(nèi)存的方式,
命名管道開啟:–shared-memory=on/off;
共享內(nèi)存開啟:–enable-named-pipe=on/off;
總結(jié)
以上是生活随笔為你收集整理的客户端连接mysql 自动断开_MySql连接空闲8小时自动断开的原因及连接池配置方法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样设置电脑壁纸_怎样设置电脑的资料定时
- 下一篇: MySQL 高级 —— 深入理解 Inn