I am writing a small web app in Go, which uses mysql to store data.
I got intermittent mysql error if the web sever didn't get any request after some amount of time(> 8 hours):
[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
I found some related discussion on github(issue 529, issue 257 and issue 446). From what I understand, mysql db would close the connection if timeout is reached.
I tried to set SetMaxOpenConns
to 9 and SetMaxIdleConns
to 0 as some people recommended. However, this threw exception immediately. (But if I set SetMaxIdleConns
larger than 0, there was no immediate exception thrown)
I also tried to set SetConnMaxLifetime
to 5 mins. This threw exception too after 5 mins.
Now I am trying the code below:
db.SetConnMaxLifetime(0)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
It has been running for 20 mins. It's still too early to tell. (UPDATE: this doesn't work either)
Here is configuration:
- driver: go-sql-driver V1.3.
- go version: go1.7.1 darwin/amd64
- mysql: latest from docker hub
- rkt version: 1.18
- CoreOS: 1284.0.0