最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決JDBC連接Mysql長時間無動作連接失效的問題

 更新時間:2021年03月24日 10:29:28   作者:看不見鯨魚的鼻子  
這篇文章主要介紹了解決JDBC連接Mysql長時間無動作連接失效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

錯誤場景介紹

做的有一個項目使用JDBC手動創(chuàng)建Connection實現(xiàn)了一個簡單的自定義數(shù)據(jù)庫連接池,用來支持Canal解析數(shù)據(jù)庫Binlog指定業(yè)務(wù)庫的插入修改SQL來進行數(shù)據(jù)庫分表備份(按照月份)操作.

但是發(fā)現(xiàn)當一個一段時間(較長)沒有進行數(shù)據(jù)庫操作時,連接都失效了,導致SQL執(zhí)行失敗失效提示為No operations allowed after connection closed

查明原因

經(jīng)過搜索發(fā)現(xiàn)這個問題是由于Mysql默認一個已創(chuàng)建的長連接28800秒(八小時)內(nèi)沒有任何動作則會斷開連接,該值對應(yīng)參數(shù)為wait_timeout.當超時時間內(nèi)有執(zhí)行動作則會重新計時

查驗

查詢Mysql超時連接時長命令show global variables like'wait_timeout'查看當前設(shè)置的超時斷開連接時長.

將其改為10,本地服務(wù)運行功能發(fā)現(xiàn)重現(xiàn)了No operations allowed after connection closed錯誤,即確實是連接超時失效

解決方法

1. 修改Mysql配置

該方法不能根治這個問題,因為不能確認服務(wù)空閑時長而精確設(shè)置timeout并且還會造成多余連接長時間未斷開而影響性能,所以不建議使用.建議在代碼層面進行解決

通過set global wait_timeout=time(秒)來修改最長連接等待超時時間,但是這樣設(shè)置當Mysql重啟失效

可以通過修改my.ini文件永久改動超時時間,如下配置

interactive_timeout=28800000
wait_timeout=28800000

2. 連接丟棄重新創(chuàng)建連接

使用conn.isValid(int timeout)(秒)判斷是否失效返回true表示連接有效,返回false表示連接失效.當失效時則重新獲取一個數(shù)據(jù)庫連接即可,之前的對象由于引用丟失會被回收掉.

3. 增加自動重連選項

在URL最后添加autoReconnect=true參數(shù),jdbc:mysql://hostaddress:3306/xhb?autoReconnect=true.我這里對這個沒有效果,可能是對框架連接池有用.

4. 定時執(zhí)行一個動作進行超時時間刷新

比如默認時間是八小時,則每七小時對連接執(zhí)行一次select 1語句來刷新該連接在數(shù)據(jù)庫的超時等待時長

也可以1 2 4一起使用,來防止突然一個流量靜默期間后突發(fā)流量高峰而導致獲取連接不及時

補充:連接總是被mysql回收_一般連接池是怎么處理mysql自動回收長時間

若干套 MySQL 環(huán)境,只有一套:

行為異常,e5a48de588b63231313335323631343130323136353331333436316239懷疑觸發(fā) bug

性能異常,比其他環(huán)境都要低

在這種場景下,我們一般的做法是首先控制變量,查看軟硬件配置,以及 MySQL 的參數(shù)配置。關(guān)于 MySQL 的參數(shù)配置對比,如果我們?nèi)斯Ρ鹊脑捴粫P(guān)注某些重點參數(shù),而缺少了整體細節(jié)上的的對比。在這里我們推薦給大家 Percona Toolkit 中的一個工具 pt-config-diff

更準確的復制延時 pt-heartbeat在 MySQL 中,復制延遲可以理解為由兩部分組成:1. 主庫已經(jīng)生成了 BINLOG,但是還沒有發(fā)送給從庫 -- 我們在這里稱之為:日志延遲2. 從庫已經(jīng)接收到了 BINLOG,但是還沒有應(yīng)用完成 -- 我們在這里稱之為:應(yīng)用延遲MySQL 原生的查看復制延遲的手段為:show slave status\G中的Seconds_Behind_Master。這種觀測手法只能觀測出應(yīng)用延遲。在異步復制或降級的半同步復制下,誤差較大,無法準確的反映出整體復制延時。

1. 在 Master 上循環(huán)插入:insert into database.heartbeat (master_now) values(NOW())

2. database.heartbeat 的變更會跟隨主從復制流向從庫

3. 系統(tǒng)當前時間 - 從庫表中的時間 = 從庫實際的復制延時

更簡單的參數(shù)配置建議 pt-variable-advisortoolkit 中包含了一個簡單的 MySQL 參數(shù)優(yōu)化器,可以對參數(shù)配置做簡單的優(yōu)化建議。

更準確的復制延時 pt-heartbeat在 MySQL 中,復制延遲可以理解為由兩部分組成:1. 主庫已經(jīng)生成了 BINLOG,但是還沒有發(fā)送給從庫 -- 我們在這里稱之為:日志延遲2. 從庫已經(jīng)接收到了 BINLOG,但是還沒有應(yīng)用完成 -- 我們在這里稱之為:應(yīng)用延遲MySQL 原生的查看復制延遲的手段為:show slave status\G中的Seconds_Behind_Master。這種觀測手法只能觀測出應(yīng)用延遲。在異步復制或降級的半同步復制下,誤差較大,無法準確的反映出整體復制延時。

更易用的調(diào)試工具 pt-pmp在某些情況下,我們肯定會遇到某些故障無法從日志,以及狀態(tài)命令中找到原因,需要深入到程序邏輯級別。又或者我們需要立即通過非常規(guī)手段恢復故障數(shù)據(jù)庫,但是又想保留足夠多的故障信息。來避免我們事后復現(xiàn)問題的頭疼。pt-pmp 便是在這種場景下幫助我們的工具。它會使用 gdb 來打印 mysqld 的堆棧信息,并把調(diào)用鏈相同的線程堆棧合并。堆棧合并的功能對于 MySQL 這種多線程的應(yīng)用非常有幫助,會節(jié)省我們大量的時間。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • MyBatis-Plus Generator配置詳解

    MyBatis-Plus Generator配置詳解

    這篇文章主要介紹了MyBatis-Plus Generator配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java?自定義注解在登錄驗證的應(yīng)用示例

    Java?自定義注解在登錄驗證的應(yīng)用示例

    本文主要介紹了Java?自定義注解在登錄驗證的應(yīng)用示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳解在Spring Boot中使用JPA

    詳解在Spring Boot中使用JPA

    本篇文章主要介紹了詳解在Spring Boot中使用JPA,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot與Quartz集成實現(xiàn)分布式定時任務(wù)集群的代碼實例

    SpringBoot與Quartz集成實現(xiàn)分布式定時任務(wù)集群的代碼實例

    今天小編就為大家分享一篇關(guān)于SpringBoot與Quartz集成實現(xiàn)分布式定時任務(wù)集群的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳解Java對象創(chuàng)建的過程及內(nèi)存布局

    詳解Java對象創(chuàng)建的過程及內(nèi)存布局

    今天給大家?guī)淼奈恼率荍ava對象創(chuàng)建的過程及內(nèi)存布局,文中有非常詳細的圖文示例及介紹,需要的朋友可以參考下
    2021-06-06
  • Java的wait(), notify()和notifyAll()使用心得

    Java的wait(), notify()和notifyAll()使用心得

    本篇文章是對java的 wait(),notify(),notifyAll()進行了詳細的分析介紹,需要的朋友參考下
    2013-08-08
  • SpringBoot如何集成Kaptcha驗證碼

    SpringBoot如何集成Kaptcha驗證碼

    本文介紹了如何在Java開發(fā)中使用Kaptcha生成驗證碼的功能,包括在pom.xml中配置依賴、在系統(tǒng)公共配置類中添加配置、在控制器中添加生成驗證碼的方法,以及前端頁面如何引用,同時,還補充了Kaptcha的更多配置屬性及其默認值
    2025-01-01
  • Java實現(xiàn)對象轉(zhuǎn)CSV格式

    Java實現(xiàn)對象轉(zhuǎn)CSV格式

    CSV是一種逗號分隔值格式的文件,一般用來存儲數(shù)據(jù)的純文本格式文件。Java對象轉(zhuǎn)CSV,有現(xiàn)成的工具包,commons-lang3 的ReflectionToStringBuilder 就可以簡單的解決的對象轉(zhuǎn)CSV,快跟隨小編一起學習一下吧
    2022-06-06
  • SpringCloud Eureka服務(wù)發(fā)現(xiàn)實現(xiàn)過程

    SpringCloud Eureka服務(wù)發(fā)現(xiàn)實現(xiàn)過程

    這篇文章主要介紹了SpringCloud Eureka服務(wù)發(fā)現(xiàn)實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • java 文件流的處理方式 文件打包成zip

    java 文件流的處理方式 文件打包成zip

    這篇文章主要介紹了java 文件流的處理方式 文件打包成zip,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

乌拉特前旗| 资阳市| 定兴县| 张家川| 宁国市| 濮阳县| 巴东县| 青海省| 克什克腾旗| 巨鹿县| 丰宁| 常山县| 西宁市| 布尔津县| 泰宁县| 兖州市| 宁阳县| 句容市| 昌江| 禹州市| 峨山| 嘉禾县| 荆州市| 军事| 安塞县| 临桂县| 乌鲁木齐市| 内乡县| 白水县| 灵丘县| 云和县| 电白县| 华宁县| 通州市| 黄梅县| 甘洛县| 澜沧| 张北县| 清河县| 通化市| 通州区|