golang sql連接池 超時 數據庫自動斷開 ->127.0.0.1:3 306: wsarecv: An established connection was aborted by the software in your host machine.


如果是mysql數據庫的話,數據庫本身有一個超時時間,超過這個時間,數據庫自動就斷開連接

查看數據庫斷開連接時間

show global variables like "%timeout%"

主要看 interactive_timeout 和 wait_timeout 的值。 (interactive_timeout針對交互式連接,wait_timeout針對非交互式連接。所謂的交互式連接,即在mysql_real_connect()函數中使用了CLIENT_INTERACTIVE選項。說得直白一點,通過mysql客戶端連接數據庫是交互式連接,通過jdbc連接數據庫是非交互式連接。 在連接啟動的時候,根據連接的類型,來確認會話變量wait_timeout的值是繼承於全局變量wait_timeout,還是interactive_timeout)

SetMaxOpenConns用於設置最大打開的連接數,默認值為0表示不限制。
SetMaxIdleConns用於設置閑置的連接數。
SetConnMaxLifetime(time.Duration(8*3600) * time.Second) //設置超時時間(不設置就默認永久有效)

這就存在一個問題:如果sqlx連接池長時間沒有連接數據庫,數據庫就會自動斷開,這時候就會導致連接錯誤

[mysql] 2019/12/25 20:04:44 packets.go:36: read tcp 127.0.0.1:60160->127.0.0.1:3
306: wsarecv: An established connection was aborted by the software in your host
machine.

解決辦法2中:

1 在數據庫連接失效之前程序自動連接一次數據庫(不推舉)。

2 設置SetConnMaxLifetime失效時間,和數據庫失效時間保持一致即可 SetConnMaxLifetime(time.Duration(8*3600) * time.Second)

 


免責聲明!

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



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