我在 my.cnf 中设置了 wait_timeout 并重新启动了服务器,但空闲连接的时间继续增长,超过了我设置的默认 100 秒。有什么想法为什么会发生这种情况吗?
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 上。它确实做了一件很棒的事情 https://github.com/rails/rails/issues/6441 ...
本质上,它用自己的大约 25 天(2147483 秒)的默认 wait_timeout 值替换为连接使用的 wait_timeout 值(可能是 wait_timeout 的会话版本),基本上覆盖了我们在服务器上指定的任何设置。
通过设置一个等待超时:值在 config/database.yml 中,超时按其应有的方式工作。然而,当连接被终止时,您会收到“mysql 服务器已消失”错误。
通过指定随附的重新连接:正确database.yml 中的选项,每次重用连接时,连接的计时器都会重置,但之后它直接使用 mysql 中的 GLOBAL wait_timeout 设置
希望这对某人有帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)