Go數據庫連接池超時An established connection was aborted by the software in your host machine

最近換新電腦後,在本地開發環境裏發現以前的Go項目時不時出現這個報錯的情況提示:127.0.0.1:3306: wsarecv: An established connection was aborted by the software in your host machine.

查看說是golang sql連接池超時,數據庫自動斷開導致的問題。
如果是mysql數據庫的話,數據庫本身有一個超時時間,超過這個時間,數據庫自動就斷開連接。

處理方法:

1.查看數據庫斷開連接時間

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)

mysql 的 interactive_timeout 默認值是 120,wait_timeout 默認值是 120。

SetMaxOpenConns 用於設置最大打開的連接數,默認值爲0表示不限制。
SetMaxIdleConns 用於設置閒置的連接數。
SetConnMaxLifetime(time.Duration(120) * time.Second) //設置超時時間與mysql的超時時間一致(不設置就默認永久有效)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章