欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql之連接超時(shí)wait_timeout問(wèn)題及解決方案

 更新時(shí)間:2024年01月01日 10:19:10   作者:林中靜月下仙  
這篇文章主要介紹了mysql之連接超時(shí)wait_timeout問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問(wèn)題現(xiàn)象

com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was 58129 seconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. 

解決辦法: 

(備注:mysql5以上的,設(shè)置autoReconnect=true 是無(wú)效的 只有4.x版本,起作用)

1. 即使在創(chuàng)建Mysql時(shí)url中加入了autoReconnect=true參數(shù),一但這個(gè)連接兩次訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)間超出了服務(wù)器端wait_timeout的時(shí)間限制,還是會(huì)

CommunicationsException: The last packet successfully received from the server was xxx milliseconds ago.

2. 服務(wù)器端的參數(shù)可以用

  show global variables like 'wait_timeout';
  set global wait_timeout=10;

來(lái)進(jìn)行設(shè)置,但是wait_timeout值不應(yīng)該設(shè)的太高.

3. 較好的策略是對(duì)處于idle狀態(tài)的connection定時(shí)發(fā)送一個(gè)sql,來(lái)刷新服務(wù)器上的時(shí)間戳.這可以使用c3p0r的連接

如果連接閑置8小時(shí) (8小時(shí)內(nèi)沒(méi)有進(jìn)行數(shù)據(jù)庫(kù)操作), mysql就會(huì)自動(dòng)斷開(kāi)連接, 要重啟tomcat.

mysql數(shù)據(jù)庫(kù)有一個(gè)wait_timeout的配置,默認(rèn)值為28800(即8小時(shí)).

在默認(rèn)配置不改變的情況下,如果連續(xù)8小時(shí)內(nèi)都沒(méi)有訪問(wèn)數(shù)據(jù)庫(kù)的操作,再次訪問(wèn)mysql數(shù)據(jù)庫(kù)的時(shí)候,mysql數(shù)據(jù)庫(kù)會(huì)拒絕訪問(wèn)。

解決方案

第一種途徑使用命令行在mysql提示符下>set  global wait_timeout=1814400

這種方式是一種臨時(shí)方法,重啟服務(wù)就會(huì)返回默認(rèn)值了。

第二種途徑修改my.ini配置文件

[mysqld]
wait_timeout=31536000 
interactive_timeout=31536000 

在mysqld下面添加以上兩行,后面的數(shù)字是時(shí)間

首先服務(wù)中找到mysql,然后右鍵屬性,在可執(zhí)行文件的路徑中,使勁向后拖動(dòng)鼠標(biāo)就可以看到my.ini的文件了

另外:關(guān)于Mysql鏈接參數(shù)的說(shuō)明如下:

mysql JDBC Driver

常用的有兩個(gè),一個(gè)是gjt(Giant Java Tree)組織提供的mysql驅(qū)動(dòng),其JDBC Driver名稱(chēng)(JAVA類(lèi)名)為:org.gjt.mm.mysql.Driver

詳情請(qǐng)參見(jiàn)網(wǎng)站:http://www.gjt.org/

或在本網(wǎng)站下載mysql JDBC Driver(mm.jar)

另一個(gè)是mysql官方提供的JDBC Driver,其JAVA類(lèi)名為:com.mysql.jdbc.Driver

驅(qū)動(dòng)下載網(wǎng)址:http://dev.mysql.com/downloads/,進(jìn)入其中的MySQL Connector/J區(qū)域下載。

mysql JDBC URL格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?參數(shù)名1][=參數(shù)值1][&參數(shù)名2][=參數(shù)值2]...

現(xiàn)只列舉幾個(gè)重要的參數(shù)

如下表所示:

參數(shù)名稱(chēng)參數(shù)說(shuō)明缺省值最低版本要求
user數(shù)據(jù)庫(kù)用戶(hù)名(用于連接數(shù)據(jù)庫(kù))所有版本
password用戶(hù)密碼(用于連接數(shù)據(jù)庫(kù))所有版本
useUnicode是否使用Unicode字符集,如果參數(shù)characterEncoding設(shè)置為gb2312或gbk,本參數(shù)值必須設(shè)置為truefalse1.1g
characterEncoding當(dāng)useUnicode設(shè)置為true時(shí),指定字符編碼。比如可設(shè)置為gb2312或gbkfalse1.1g
autoReconnect當(dāng)數(shù)據(jù)庫(kù)連接異常中斷時(shí),是否自動(dòng)重新連接?false1.1
autoReconnectForPools是否使用針對(duì)數(shù)據(jù)庫(kù)連接池的重連策略false3.1.3
failOverReadOnly自動(dòng)重連成功后,連接是否設(shè)置為只讀?true3.0.12
maxReconnectsautoReconnect設(shè)置為true時(shí),重試連接的次數(shù)31.1
initialTimeoutautoReconnect設(shè)置為true時(shí),兩次重連之間的時(shí)間間隔,單位:秒21.1
connectTimeout和數(shù)據(jù)庫(kù)服務(wù)器建立socket連接時(shí)的超時(shí),單位:毫秒。 0表示永不超時(shí),適用于JDK 1.4及更高版本03.0.1
socketTimeoutsocket操作(讀寫(xiě))超時(shí),單位:毫秒。 0表示永不超時(shí)03.0.1

對(duì)應(yīng)中文環(huán)境,通常mysql連接URL可以設(shè)置為:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

在使用數(shù)據(jù)庫(kù)連接池的情況下,最好設(shè)置如下兩個(gè)參數(shù):

autoReconnect=true&failOverReadOnly=false

需要注意的是,在xml配置文件中,url中的&符號(hào)需要轉(zhuǎn)義成&。比如在tomcat的server.xml中配置數(shù)據(jù)庫(kù)連接池時(shí)

mysql jdbc url樣例如下:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk

&autoReconnect=true&failOverReadOnly=false

場(chǎng)景出現(xiàn)的理論依據(jù)

MySQL 的默認(rèn)設(shè)置下,當(dāng)一個(gè)連接的空閑時(shí)間超過(guò)8小時(shí)后,MySQL 就會(huì)斷開(kāi)該連接,而 c3p0/dbcp 連接池則以為該被斷開(kāi)的連接依然有效。在這種情況下,如果客戶(hù)端代碼向c3p0/dbcp 連接池請(qǐng)求連接的話,連接池就會(huì)把已經(jīng)失效的連接返回給客戶(hù)端,客戶(hù)端在使用該失效連接的時(shí)候即拋出異常。

如果你只是個(gè)DBA,你會(huì)想著,為什么數(shù)據(jù)庫(kù)連接自己斷了,是不是哪里有配置,我得去看看,那么你得到的解決方案-可能就是這樣的

#my.cnf
wait_timeout=31536000
interactive_timeout=31536000

加大wait_timeout的時(shí)間。

But 現(xiàn)實(shí)環(huán)境中需要你考慮的是:

  • 你設(shè)置多久檢查一次連接有效的時(shí)間 依據(jù)是什么?
  • 默認(rèn)加大/減小wait_timeout除了解決當(dāng)前問(wèn)題,會(huì)不會(huì)帶來(lái)其他影響?

個(gè)人當(dāng)前覺(jué)得此題 第一需考慮的是: 

你業(yè)務(wù)當(dāng)前高峰期mysql_connection是多少?保留多久connection在高峰期都不會(huì)撐爆你數(shù)據(jù)庫(kù)連接池? 

如果你知道這個(gè)池-那么是改mysql ?還是改c3p0?還是雙管齊下都是有據(jù)可循且不會(huì)帶來(lái)后遺癥的-最佳解決方案

如我當(dāng)前有環(huán)境,一個(gè)現(xiàn)網(wǎng)的后臺(tái)管理系統(tǒng),使用人數(shù)在50以?xún)?nèi),那么我wait_timeout 就是默認(rèn)8小時(shí),c3p0不用做連接有效性檢查等,都是萬(wàn)事ok的。

而我還有一個(gè)EPG前臺(tái)管理系統(tǒng),用戶(hù)量在300萬(wàn)以?xún)?nèi),如果我wait_timeout為8小時(shí),那我一到高峰期肯定就是死翹翹的,會(huì)有太多的TCP連接沒(méi)關(guān)閉,數(shù)據(jù)庫(kù)連接數(shù)肯定是不夠的。

因EPG的一個(gè)訪問(wèn)-一次對(duì)數(shù)據(jù)庫(kù)操作量不大,查詢(xún)完數(shù)據(jù)就完成ok啦,wait_timeout 設(shè)置在120s內(nèi)應(yīng)該是夠用啦,那么相對(duì)應(yīng)的c3p0中 設(shè)置小于wait_timeout 的時(shí)間有效性檢查 -就能確保獲取到連接是有效的。

請(qǐng)根據(jù)業(yè)務(wù)場(chǎng)景,來(lái)配置參數(shù),不要解決了A問(wèn)題,帶來(lái)了B問(wèn)題。

springboot 配置

#下面為連接池的補(bǔ)充設(shè)置,應(yīng)用到上面所有數(shù)據(jù)源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置獲取連接等待超時(shí)的時(shí)間
spring.datasource.maxWait=60000
# 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒 
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 
spring.datasource.minEvictableIdleTimeMillis=300000

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL索引操作命令詳解

    MySQL索引操作命令詳解

    這篇文章主要介紹了MySQL索引操作命令詳解,需要的朋友可以參考下
    2017-01-01
  • mysql 5.5 開(kāi)啟慢日志slow log的方法(log_slow_queries)

    mysql 5.5 開(kāi)啟慢日志slow log的方法(log_slow_queries)

    MySQL中提供了一個(gè)慢查詢(xún)的日志記錄功能,可以把查詢(xún)SQL語(yǔ)句時(shí)間大于多少秒的語(yǔ)句寫(xiě)入慢查詢(xún)?nèi)罩荆粘>S護(hù)中可以通過(guò)慢查詢(xún)?nèi)罩镜挠涗浶畔⒖焖贉?zhǔn)確地判斷問(wèn)題所在
    2016-05-05
  • MySQL 觸發(fā)器(TRIGGER)的具體使用

    MySQL 觸發(fā)器(TRIGGER)的具體使用

    本文主要介紹了MySQL 觸發(fā)器(TRIGGER)的具體使用,包含INSERT 觸發(fā)器,UPDATE觸發(fā)器和DELETE觸發(fā)器這三種,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • MySQL在生產(chǎn)環(huán)境出現(xiàn)無(wú)法啟動(dòng)的問(wèn)題解決

    MySQL在生產(chǎn)環(huán)境出現(xiàn)無(wú)法啟動(dòng)的問(wèn)題解決

    在當(dāng)今的數(shù)據(jù)驅(qū)動(dòng)世界中,MySQL作為廣泛應(yīng)用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在眾多生產(chǎn)環(huán)境中承擔(dān)著至關(guān)重要的角色,然而,面對(duì)復(fù)雜多變的業(yè)務(wù)場(chǎng)景,MySQL可能會(huì)遭遇各類(lèi)故障和性能瓶頸,本文將深入探討MySQL在生產(chǎn)環(huán)境出現(xiàn)無(wú)法啟動(dòng)的問(wèn)題解決,需要的朋友可以參考下
    2024-10-10
  • MySql開(kāi)發(fā)之自動(dòng)同步表結(jié)構(gòu)

    MySql開(kāi)發(fā)之自動(dòng)同步表結(jié)構(gòu)

    這篇文章主要給大家介紹了關(guān)于MySql開(kāi)發(fā)之自動(dòng)同步表結(jié)構(gòu)的相關(guān)資料,這樣可以避免在開(kāi)發(fā)中由于修改數(shù)據(jù)庫(kù)字段導(dǎo)致的數(shù)據(jù)庫(kù)表不一致問(wèn)題,需要的朋友可以參考下
    2021-05-05
  • mysql中的自連接與join關(guān)聯(lián)

    mysql中的自連接與join關(guān)聯(lián)

    這篇文章主要介紹了mysql中的自連接與join關(guān)聯(lián),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • mysql 5.7.25 安裝配置方法圖文教程

    mysql 5.7.25 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.25 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • MySQL 百萬(wàn)級(jí)數(shù)據(jù)的4種查詢(xún)優(yōu)化方式

    MySQL 百萬(wàn)級(jí)數(shù)據(jù)的4種查詢(xún)優(yōu)化方式

    本文講解了MySQL 百萬(wàn)級(jí)數(shù)據(jù)的4種查詢(xún)優(yōu)化方式,大家可以根據(jù)自身需求,選擇適合自己的優(yōu)化方式
    2021-06-06
  • centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法

    centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法

    這篇文章主要介紹了centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法,需要的朋友可以參考下
    2017-11-11
  • Mysql之如何根據(jù).frm和.idb文件恢復(fù)表結(jié)構(gòu)

    Mysql之如何根據(jù).frm和.idb文件恢復(fù)表結(jié)構(gòu)

    這篇文章主要介紹了Mysql之如何根據(jù).frm和.idb文件恢復(fù)表結(jié)構(gòu)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論