mysql不尊重my.cnf中的wait_timeout设置

con*_*t47 3 mysql ruby-on-rails amazon-ec2 mysql2

我在my.cnf中设置了wait_timeout并重新启动了服务器,但空闲连接的时间继续大于我设置的默认值100s.任何想法为什么会这样?

PS:我正在运行ubuntu 12.04和Mysql Server 5.5.使用Rails 3和mysql2 gem.

mysql> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST ORDER BY TIME DESC LIMIT 20;
+------+------------------+-------------------------------------+--------------------------+---------+------+-------+------+
| ID   | USER             | HOST                                | DB                       | COMMAND | TIME | STATE | INFO |
+------+------------------+-------------------------------------+--------------------------+---------+------+-------+------+

|  760 | user | ip-xxx-xxx-xxx-xxx.ec2.internal:45852 | x | Sleep   | 4202 |       | NULL |
|  912 | user | ip-xxx-xxx-xxx-xxx.ec2.internal:40929 | y  | Sleep   | 4194 |       | NULL |
|  976 | user | ip-xxx-xxx-xxx-xxx.ec2.internal:40970 | y  | Sleep   | 4193 |       | NULL |
|  836 | user | ip-xxx-xxx-xxx-xxx.ec2.internal:49903   | z | Sleep   | 4189 |       | NULL |
| 1743 | user | ip-xxx-xxx-xxx-xxx.ec2.internal:44585  | z | Sleep   | 4157 |       | NULL |
| 1778 | user | ip-xxx-xxx-xxx-xxx.ec2.internal:48714    | a  | Sleep   | 4154 |       | NULL |
Run Code Online (Sandbox Code Playgroud)

con*_*t47 7

原来问题出在mysql2 gem中.这真的很棒 ......

本质上,它将自己的大约25天(2147483s)的默认wait_timeout值替换为连接使用的wait_timeout值(可能是wait_timeout的会话版本),基本上覆盖了我们在服务器上指定的任何设置.

通过在config/database.yml中设置wait_timeout:值,超时可以正常工作.但是,当连接被杀死时,你会得到"mysql server已经消失"的错误.

通过 在database.yml中指定一个附带的reconnect:true选项,每次重用连接时,连接的计时器都会被重置,但之后它会直接使用mysql的GLOBAL wait_timeout设置.

希望这有助于某人