MySQLのinteractive_timeout

ちょっとしたオンラインゲームを作っているのだけど、サーバー側はC#で書いていて、ODBC経由でMySQLとやりとりしている。DBは同一サーバー上にあるので、ゲームサーバー起動中はサーバー側のプログラムがMySQLに対してコネクションを張りっぱなしにする。


localhostなので、切断されることは想定してなかったのだけども、深夜、ユーザーからのアクセスが無いと切断されていることがある。これには参った。どうやら、ある程度の時間アクセスが無いとコネクションが切断されるようだ。


同じ問題で悩んでいる人の記事を見ると、なるほど、MySQLの設定でinteractive_timeoutという項目があり、これがディフォルトでは8時間に設定されているようだ。よって8時間連続で、クエリ等を発行しなければコネクションは自動的に切断されてしまうのだ。


なんとも余計なお世話である。しかし、この設定を無効にする方法が存在しない。0を指定しても無駄である。最大値は31536000秒(= 365日)なので、これを指定する他ない。また、interactive_timeoutと同時にwait_timeoutも設定しておく必要がある。どうも、interactive_timeoutとwait_timeoutの値のうち、小さい値のほうの時間アクセスが無いとコネクションが自動的に切断されるようだ。


結局のところ、my.iniに以下のように追記することで自動切断時間を延ばすことに成功した。


[mysqld]
#The number of seconds the server waits for activity on an interactive connection before closing it.
wait_timeout=31536000
interactive_timeout=31536000

同じ問題で悩んでいる人のお役に立てれば幸い。