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

我在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 | 

原来问题出在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设置。

希望这有助于某人

一种可能性是将会话的wait_timeout设置为interactive_timeout系统变量的值。

 SHOW VARIABLES LIKE 'interactive_timeout' 

并且默认值为8小时。