MySQL常見報錯分析及解決方案總結(9)---出現interactive_timeout/wait_timeout

關于超時報錯,一共有五種超時參數,詳見:MySQL常見報錯分析及解決方案總結(7)---超時參數connect_timeout、interactive_timeout/wait_timeout、lock_wait_timeout、net等-CSDN博客

以下是當前報錯的排查方法和解決方案:

MySQL 中的?interactive_timeout?和?wait_timeout?是控制數據庫連接閑置超時的參數,當連接閑置時間超過設定值時,會觸發超時斷開,導致相關錯誤。

一、報錯效果

Java 程序在連接 MySQL 后,若長時間未執行操作(超過超時閾值),再次執行 SQL 時會拋出連接中斷錯誤,典型信息如下:

com.mysql.cj.jdbc.exceptions.CommunicationsException: The last packet successfully received from the server was 360,000 milliseconds ago. The driver has not received any packets from the server recently.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Lost connection to MySQL server during query

更直接的提示可能包含:

java.sql.SQLException: No operations allowed after connection closed.

核心特征:連接成功建立后能正常操作,但閑置一段時間(如幾小時)后,首次執行 SQL 會失敗,需重新連接才能恢復。

二、引起報錯的原因

  1. 連接閑置超時
    Java 程序建立的連接屬于非交互式連接,受?wait_timeout?控制(默認 8 小時)。若程序長時間未執行 SQL(如夜間無人操作的系統),閑置時間超過?wait_timeout,MySQL 服務器會主動關閉連接釋放資源,此時 Java 程序若未檢測連接狀態,繼續使用已失效的連接就會報錯。

  2. 參數設置過短
    若 MySQL 服務器的?wait_timeout?被手動改小(如 60 秒),即使程序短暫閑置(如處理業務邏輯耗時),也可能觸發超時。

  3. 連接池配置問題
    若使用連接池(如 HikariCP、C3P0),但未配置 “連接有效性檢測” 或 “閑置回收” 機制,連接池會認為斷開的連接仍有效并分配給程序,導致報錯。

  4. Windows 環境特有因素

    • Windows 防火墻或安全軟件可能在連接閑置時主動斷開 “空閑連接”,加速超時。
    • MySQL 服務在 Windows 上若配置了 “自動釋放資源” 策略,可能比 Linux 更嚴格地執行超時回收。

三、解決辦法

1.?調整 MySQL 的超時參數(通用方案)

延長?wait_timeout?以匹配程序的閑置需求(需重啟 MySQL 生效):

  • 臨時修改(當前會話有效,重啟后失效):
    登錄 MySQL 客戶端(Windows 可通過?mysql -u root -p?命令),執行:
    set global wait_timeout = 86400;  -- 設為24小時(單位:秒)
    set global interactive_timeout = 86400;  -- 同步修改,避免沖突
    
  • 永久修改(推薦):
    找到 MySQL 配置文件(Windows 通常為?my.ini,路徑可能在?C:\ProgramData\MySQL\MySQL Server x.x\?或安裝目錄),在?[mysqld]?下添加:
    [mysqld]
    wait_timeout=86400
    interactive_timeout=86400
    
    重啟 MySQL 服務:在 “服務” 中找到 “MySQL”,右鍵 “重啟”。
2.?Java 程序層面優化
  • 避免長期持有連接:執行完 SQL 后及時關閉連接(使用?try-with-resources?自動關閉):

    // 推薦寫法:自動關閉連接、Statement、ResultSet
    try (Connection conn = DriverManager.getConnection(url, user, password);PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM table");ResultSet rs = pstmt.executeQuery()) {// 處理結果
    } catch (SQLException e) {e.printStackTrace();
    }
    
  • 添加連接心跳檢測:在閑置時定期發送輕量 SQL(如?SELECT 1)保持連接活躍,例如:

    // 定時任務:每30分鐘執行一次心跳
    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    scheduler.scheduleAtFixedRate(() -> {try (Connection conn = getConnection()) {  // 從連接池獲取連接conn.createStatement().execute("SELECT 1");} catch (SQLException e) {// 連接已失效,可觸發重連邏輯}
    }, 0, 30, TimeUnit.MINUTES);
    
3.?連接池配置優化(重點)

若使用連接池(如 Spring Boot 默認的 HikariCP),需配置與 MySQL 超時匹配的參數,避免使用失效連接:

# Spring Boot 配置示例(application.yml)
spring:datasource:url: jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456hikari:maximum-pool-size: 10idle-timeout: 300000  # 連接池閑置超時(5分鐘),需小于 MySQL 的 wait_timeoutmax-lifetime: 1800000  # 連接最大存活時間(30分鐘),需小于 wait_timeoutconnection-test-query: SELECT 1  # 每次獲取連接時檢測有效性
  • 關鍵配置說明
    • idle-timeout:連接池自動回收閑置連接的時間,必須小于 MySQL 的?wait_timeout(如 MySQL 設為 24 小時,此處可設為 5-30 分鐘)。
    • connection-test-query:獲取連接時執行?SELECT 1?檢測連接是否有效,無效則自動重建。
4.?Windows 環境特殊處理
  • 關閉防火墻對 MySQL 連接的干擾
    進入 “Windows Defender 防火墻”→“高級設置”→“入站規則”,確保 MySQL 端口(默認 3306)的規則為 “允許連接”,且未勾選 “空閑時關閉連接”。
  • 檢查 MySQL 服務狀態
    在 “服務” 中確認 MySQL 服務啟動類型為 “自動”,避免服務意外停止導致連接中斷。

總結

Windows 上 Java 程序的?wait_timeout?錯誤核心仍是 “閑置連接被服務器斷開”。解決需結合三方面:

  1. 合理設置 MySQL 的?wait_timeout?參數;
  2. 程序或連接池主動檢測并維護連接有效性;
  3. 排除 Windows 環境(防火墻、服務)對連接的干擾。
    通過連接池配置?connection-test-query?和?idle-timeout?是最有效的長期解決方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95851.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95851.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95851.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第13章 Jenkins性能優化

13.1 性能優化概述 性能問題識別 常見性能瓶頸: Jenkins性能問題分類:1. 系統資源瓶頸- CPU使用率過高- 內存不足或泄漏- 磁盤I/O瓶頸- 網絡帶寬限制2. 應用層面問題- JVM配置不當- 垃圾回收頻繁- 線程池配置問題- 數據庫連接池不足3. 架構設計問題- 單點…

Python+DRVT 從外部調用 Revit:批量創建梁

今天讓我們繼續,看看如何批量創建常用的基礎元素:梁。 跳過軸線為直線段形的,先從圓弧形的開始: from typing import List, Tuple import math # drvt_pybind 支持多會話、多文檔,先從簡單的單會話、單文檔開始 # My…

水上樂園票務管理系統設計與開發(代碼+數據庫+LW)

摘 要 隨著旅游業的蓬勃發展,水上樂園作為夏日娛樂的重要組成部分,其票務管理效率和服務質量直接影響游客體驗。然而,傳統的票務管理模式往往面臨信息更新不及時、服務響應慢等問題。因此,本研究旨在通過設計并實現一個基于Spri…

【前端教程】JavaScript DOM 操作實戰案例詳解

案例1&#xff1a;操作div子節點并修改樣式與內容 功能說明 獲取div下的所有子節點&#xff0c;設置它們的背景顏色為紅色&#xff1b;如果是p標簽&#xff0c;將其內容設置為"我愛中國"。 實現代碼 <!DOCTYPE html> <html> <head><meta ch…

qiankun+vite+react配置微前端

微前端框架&#xff1a;qiankun。 主應用&#xff1a;react19vite7&#xff0c;子應用1&#xff1a;react19vite7&#xff0c;子應用2 &#xff1a;react19vite7 一、主應用 1. 安裝依賴 pnpm i qiankun 2. 注冊子應用 (1) 在src目錄下創建個文件夾&#xff0c;用來存儲關于微…

git: 取消文件跟蹤

場景&#xff1a;第一次初始化倉庫的時候沒有忽略.env或者node_modules&#xff0c;導致后面將.env加入.gitignore也不生效。 取消文件跟蹤&#xff1a;如果是因為 node_modules 已被跟蹤導致忽略無效&#xff0c; 可以使用命令git rm -r --cached node_modules來刪除緩存&…

開講啦|MBSE公開課:第五集 MBSE中期設想(下)

第五集 在本集課程中&#xff0c;劉玉生教授以MBSE建模工具選型及二次定制開發為核心切入點&#xff0c;系統闡釋了"為何需要定制開發"與"如何實施定制開發"的實踐邏輯&#xff0c;并提煉出MBSE中期實施的四大核心要素&#xff1a;高效高質建摸、跨域協同…

CSDN個人博客文章全面優化過程

兩天前達到博客專家申請條件&#xff0c;興高采烈去申請博客專家&#xff1a; 結果今天一看&#xff0c;申請被打回了&#xff1a; 我根據“是Yu欸”大神的博客&#xff1a; 【2024-完整版】python爬蟲 批量查詢自己所有CSDN文章的質量分&#xff1a;附整個實現流程_抓取csdn的…

Websocket的Key多少個字節

在WebSocket協議中&#xff0c;握手過程中的Sec-WebSocket-Key是一個由客戶端生成的隨機字符串&#xff0c;用于安全地建立WebSocket連接。這個Sec-WebSocket-Key是基于Base64編碼的&#xff0c;并且通常由客戶端在WebSocket握手請求的頭部字段中發送。根據WebSocket協議規范&a…

SVT-AV1編碼器中實現WPP依賴管理核心調度

一 assign_enc_dec_segments 函數。這個函數是 SVT-AV1 編碼器中實現波前并行處理&#xff08;WPP&#xff09; 和分段依賴管理的核心調度器之一。//函數功能&#xff1a;分配編碼解碼段任務//返回值Bool//True 成功分配了一個段給當前線程&#xff0c;調用者應該處理這個段//F…

直接讓前端請求代理到自己的本地服務器,告別CV報文到自己的API工具,解放雙手

直接使用前端直接調用本地服務器&#xff0c;在自己的瀏覽器搜索插件proxyVerse&#xff0c;類似的插件應該還有一些&#xff0c;可以選擇自己喜歡的這類插件可以將瀏覽器請求&#xff0c;直接轉發到本地服務器&#xff0c;這樣在本地調試的時候&#xff0c;不需要前端項目&…

Golang Goroutine 與 Channel:構建高效并發程序的基石

在當今這個多核處理器日益普及的時代&#xff0c;利用并發來提升程序的性能和響應能力已經成為軟件開發的必然趨勢。而Go語言&#xff0c;作為一門為并發而生的語言&#xff0c;其設計哲學中將“并發”置于核心地位。其中&#xff0c;Goroutines 和 Channels 是Go實現并發編程的…

17 C 語言宏進階必看:從宏替換避坑到宏函數用法,不定參數模擬實現一次搞定

預處理詳解1. 預定義符號//C語?設置了?些預定義符號&#xff0c;可以直接使?&#xff0c;預定義符號也是在預處理期間處理的。 __FILE__ //進?編譯的源?件--預處理階段被替換成指向文件名字符串的指針--char* 類型的變量 __LINE__ //?件當前的?號 --預處理階段替換成使用…

深入剖析 HarmonyOS ArkUI 聲明式開發:狀態管理藝術與最佳實踐

好的&#xff0c;請看這篇關于 HarmonyOS ArkUI 聲明式開發范式與狀態管理的技術文章。 深入剖析 HarmonyOS ArkUI 聲明式開發&#xff1a;狀態管理藝術與最佳實踐 引言 隨著 HarmonyOS 4、5 的廣泛應用以及面向未來的 HarmonyOS NEXT&#xff08;API 12&#xff09;的發布&…

Qwen-Code安裝教程

一、概述Qwen Code 是一個強大的基于命令行、面向開發者的 AI 工作流工具&#xff0c;改編自 Gemini CLI&#xff0c;專門針對 Qwen3-Coder 模型進行了優化。它專門為代碼理解、代碼重構、自動化工作流、Git 操作等場景設計&#xff0c;讓你的開發工作變得更高效、更智能。它既…

老師傅一分鐘精準判斷電池好壞!就靠這個神器!

在汽車維修與保養領域&#xff0c;蓄電池狀態的準確判斷一直是技術人員面臨的重要挑戰。傳統的電壓測量方法只能反映表面現象&#xff0c;無法深入評估蓄電池的實際健康狀態。Midtronics MDX-P300蓄電池及電氣系統測試儀作為專業級診斷設備&#xff0c;通過電導測試技術和多系統…

Axure筆記

Axure介紹 快速原型的軟件 應用場景&#xff1a;拉投資、給項目團隊、銷售演示、項目投標、內部收集反饋、教學 軟件安裝與漢化 漢化&#xff1a;復制lang文件夾和三個dll 軟件的基礎功能 基本布局&#xff1a;菜單欄、工具欄、頁面和摘要、元件和母版、畫布、樣式交互和說明設…

Pytorch Yolov11 OBB 旋轉框檢測+window部署+推理封裝 留貼記錄

Pytorch Yolov11 OBB 旋轉框檢測window部署推理封裝 留貼記錄 上一章寫了下【Pytorch Yolov11目標檢測window部署推理封裝 留貼記錄】&#xff0c;這一章開一下YOLOV11 OBB旋轉框檢測相關的全流程&#xff0c;有些和上一章重復的地方我會簡寫&#xff0c;要兩篇結合著看&#x…

《Keil 開發避坑指南:STM32 頭文件加載異常與 RTE 配置問題全解決》

《Keil 開發避坑指南&#xff1a;STM32 頭文件加載異常與 RTE 配置問題全解決》文章提綱一、引言? 簡述 Keil 在 STM32 開發中的核心地位&#xff0c;指出頭文件加載和 RTE&#xff08;運行時環境&#xff09;配置是新手常遇且關鍵的問題&#xff0c;說明本文旨在為開發者提…

TortoiseGit 2.4.0.0 64位安裝教程(附詳細步驟和Git配置 附安裝包)

本教程詳細講解 ?TortoiseGit 2.4.0.0 64位版本? 的完整安裝步驟&#xff0c;包括如何運行 ?TortoiseGit-2.4.0.0-64bit.msi? 安裝包、設置安裝路徑、關聯 Git 環境&#xff0c;以及安裝后的基本配置方法&#xff0c;適合 Windows 用戶快速上手 Git 圖形化管理工具。 一、…