我在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 |
答案 0 :(得分:6)
原来问题出在mysql2 gem中。 It does this really awesome thing ......
本质上,它将自己的大约25天(2147483s)的默认wait_timeout值替换为连接使用的wait_timeout值(可能是wait_timeout的会话版本),基本上覆盖了我们在服务器上指定的任何设置。
通过在config / database.yml中设置 wait_timeout:value ,超时可以正常工作。然而,当连接被杀死时,你会得到“mysql server off away”错误。
指定随附的重新连接:true database.yml中的选项,每次重用连接时,连接的计时器都会被重置,但之后它会直接使用mysql的GLOBAL wait_timeout设置
希望这有助于某人
答案 1 :(得分:2)
一种可能性是会话的wait_timeout
被设置为interactive_timeout
系统变量的值。
SHOW VARIABLES LIKE 'interactive_timeout'
默认值为8小时。