私はGoにデータを格納するためにmysqlを使用する小さなWebアプリケーションを作成しています。私はgithubの(issue 529、issue 257とissue 446にいくつかの関連の議論を見つけたmysql接続のタイムアウトに最適なソリューションは何ですか?
[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
:ウェブサーバは、ある程度の時間の後に任意の要求(> 8時間)を取得していない場合
私は断続的なMySQLのエラーを得ました)。私が理解していることから、タイムアウトに達すると、mysql dbは接続を閉じます。
SetMaxOpenConns
を9に、SetMaxIdleConns
を0に設定しようとしました。しかし、これはすぐに例外を投げた。 (ただし、SetMaxIdleConns
を0より大きく設定すると、すぐに例外がスローされませんでした)
また、SetConnMaxLifetime
を5分に設定しようとしました。これは5分後にも例外を投げた。
今私は以下のコードをしようとしています:
db.SetConnMaxLifetime(0)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
をそれが20分間実行されています。まだ教えるのは時期尚早です。
- ドライバ:行く-SQLドライバV1.3(UPDATE:これはどちらか動作しません)
ここでは、コンフィギュレーションです。
- 行くバージョン:go1.7.1ダーウィン/ AMD64
- のmysql:latest from docker hub
- RKTバージョン:1.18
- CoreOS:1284.0.0
'{db.ping()}'はハートビートのゴルーチンとして十分でしょうか? – city
または多分{{{db.Exec( "DO 42")}} 'の提案は、https://github.com/go-sql-driver/mysql/issues/498で提案された方が良いでしょう。 – city
ティッカー、できるだけ早くそれをpingする必要はありません。 – Adrian