0
我正在Go中寫一個小型的網絡應用程序,它使用mysql來存儲數據。什麼是mysql連接超時的最佳解決方案?
我有間歇性MySQL錯誤如果Web服務器沒有得到(> 8小時)的一定時間後的任何請求:
[mysql] 2017/02/08 16:31:56 packets.go:33: unexpected EOF
[mysql] 2017/02/08 16:31:56 packets.go:130: write tcp 127.0.0.1:49188->127.0.0.1:3306: write: broken pipe
我發現GitHub上(issue 529,issue 257和issue 446一些相關的討論)。據我所知,如果達到超時,mysql db會關閉連接。
我試圖將SetMaxOpenConns
設置爲9,SetMaxIdleConns
設置爲0,因爲有些人推薦。但是,這立即引發異常。 (但如果我設置SetMaxIdleConns
大於0,則沒有立即拋出異常)
我也嘗試將SetConnMaxLifetime
設置爲5分鐘。這在5分鐘後也拋出異常。
現在,我想下面的代碼:
db.SetConnMaxLifetime(0)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
它已經運行了20分鐘。現在說還爲時過早。 (UPDATE:這也不行)
下面是配置:
- 司機:去-SQL驅動程序V1.3。
- 去版本:go1.7.1達爾文/ AMD64
- 的mysql:latest from docker hub
- RKT版本:1.18
- CoreOS:1284.0.0
對於{db.ping()}'來說,作爲心跳門控就足夠了嗎? – city
或者{{for {db.Exec(「DO 42」)}}'最好在https://github.com/go-sql-driver/mysql/issues/498 – city
處給出建議。在一段時間內.Ticker不需要儘可能快地進行ping操作。 – Adrian