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

Demo 阅读:43 2024-05-29 10:23:45 评论:0

我在 my.cnf 中设置了 wait_timeout 并重新启动了服务器,但空闲连接的时间继续增长,超过了我设置的默认 100 秒。任何想法为什么会发生这种情况?

PS:我正在运行 ubuntu 12.04 和 Mysql Server 5.5。使用带有 mysql2 gem 的 Rails 3。

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 上。 It does this really awesome thing ...

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

通过在 config/database.yml 中设置 wait_timeout: value 超时工作正常。但是,当连接被终止时,您会收到“mysql server has gone away”错误。

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

希望这对某人有所帮助


标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号