被mysql中的wait_timeout坑了


      今天被mysql里的wait_timeout坑了

 
      網上能搜到很多關於mysql中的wait_timeout相關的文章,但是大多數只是說明了他的作用,而且都說這個參數要配合那個interactive_timeout參數一起修改才會生效,經過今天我和同事的努力,這里要說一下,其實是我把同事坑了,很慚愧,之前只是看服務器上連接mysql的連接很多都是timewait狀態,逐在網上搜索到這個wait_timeout參數,使用該參數后,果然很有效,大大抑制了很多無效的timewait,但是誰知道這個參數會影響后端程序的連接,至於原因,后面會說。
 
      為什么會說網上大多數都是坑呢?因為這個wait_timeout並不是改了配置文件不起作用,也不是非要和那個interactive_timeout一起改,才會生效,只是你在配置文件中配置“wait_timeout = 10”,在mysql里,用 show variables like "%timeout%"看到的還是28800

 
      但是,這里實際上已經按你配置的時間在運行了,也就是說配置已經生效了,為什么這里show不出變化,我也不清楚為什么。
就是因為這個,我們花費了大半天的時間來查找程序上的bug
 
 
      這個wait_timeout的作用是,設置非交互連接(就是指那些連接池方式、非客戶端方式連接的)的超時時間,默認是28800,就是8小時,超過這個時間,mysql服務器會主動切斷那些已經連接的,但是狀態是sleep的連接。
      而我們后端程序是運行在windows下的,所以安裝的myodbc,並使用ado方式連接的,也就是連接池方式,這種方式的壞處是,當服務器端去連接mysql的時候,連接池里的連接已經被mysql主動斷開,這時取回的連接就是null,再加上程序里對此沒有做判斷的話,接下來的對數據庫的一系列的操作都會出現問題。
  反正就是很坑,唉,說多了都是淚。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM