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

mysql之連接超時wait_timeout問題及解決方案

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

問題現(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 是無效的 只有4.x版本,起作用)

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

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;

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

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

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

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

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

解決方案

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

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

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

[mysqld]
wait_timeout=31536000 
interactive_timeout=31536000 

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

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

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

mysql JDBC Driver

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

詳情請參見網(wǎng)站:http://www.gjt.org/

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

另一個是mysql官方提供的JDBC Driver,其JAVA類名為:com.mysql.jdbc.Driver

驅(qū)動下載網(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)只列舉幾個重要的參數(shù)

如下表所示:

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

對應(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ù)庫連接池的情況下,最好設(shè)置如下兩個參數(shù):

autoReconnect=true&failOverReadOnly=false

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

mysql jdbc url樣例如下:

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

&autoReconnect=true&failOverReadOnly=false

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

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

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

#my.cnf
wait_timeout=31536000
interactive_timeout=31536000

加大wait_timeout的時間。

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

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

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

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

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

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

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

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

請根據(jù)業(yè)務(wù)場景,來配置參數(shù),不要解決了A問題,帶來了B問題。

springboot 配置

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

總結(jié)

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

相關(guān)文章

  • MySQL索引操作命令詳解

    MySQL索引操作命令詳解

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

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

    MySQL中提供了一個慢查詢的日志記錄功能,可以把查詢SQL語句時間大于多少秒的語句寫入慢查詢?nèi)罩?,日常維護(hù)中可以通過慢查詢?nèi)罩镜挠涗浶畔⒖焖贉?zhǔ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)無法啟動的問題解決

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

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

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

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

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

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

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

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

    MySQL 百萬級數(shù)據(jù)的4種查詢優(yōu)化方式

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

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

    這篇文章主要介紹了centos上安裝mysql并設(shè)置遠(yuǎ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)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論