透明思考


Transparent Thoughts


MySQL掉线咯

一个后台操作算得太久,然后再想跟MySQL说说话的时候,就发现那个server已经偷偷的跑掉了

MySQL的超时可以用SQL查到:

mysql show variables;

看interactive_timeout和wait_timeout这两项。缺省是28800(秒),我们的服务器上设成了600。所以,一个长循环跑了11分钟之后,数据库连接已经被关掉了,因为中间没有和数据库打交道。

(多长的循环可以跑10分钟?我看到的大概是8000多和20000多的两个数组做了一下select…)

这些变量可以在/etc/my.cnf里面设置的。

Rails应用可以把ActiveRecord::Base.verification_timeout设为一个小于数据库连接超时的值(比如500)这样Rails就会帮你每过500秒PING一下数据库这样连接就不会断掉了。

(唔…10分钟会让很多东西超时,比如Apache…)

然则我们的操作是Rails之外的一个stand-alone进程,Rails也不管帮忙它,所以要在循环的过程中时不时的PING一下数据库:

ActiveRecord::Base.connection.verify!(0)

于是就可以了。