mysql не спазва настройката wait_timeout в my.cnf

Зададох wait_timeout в my.cnf и рестартирах сървъра, но времето при неактивни връзки продължава да расте повече от зададените от мен 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 |

person concept47    schedule 22.05.2014    source източник


Отговори (2)


Оказва се, че проблемът е в mysql2 gem. Прави това наистина страхотно нещо ...

По същество той замества собствената стойност на wait_timeout по подразбиране от около 25 дни (2147483 s) като стойността на wait_timeout (вероятно версията на сесията на wait_timeout), която връзката използва, като основно отменя всяка настройка, която сме посочили на сървъра.

Чрез задаване на wait_timeout: стойност в config/database.yml времето за изчакване работи както трябва. Когато обаче връзката бъде прекъсната, получавате грешки „mysql server has gone away“.

Чрез указване на придружаваща опция reconnect: true в database.yml, всеки път, когато връзката се използва повторно, таймерът на връзката се нулира, НО след това той използва ГЛОБАЛНАТА настройка wait_timeout от mysql директно

Надявам се това да помогне на някого

person concept47    schedule 22.05.2014

Една от възможностите е wait_timeout за сесия да се задава като стойност на системната променлива interactive_timeout.

SHOW VARIABLES LIKE 'interactive_timeout'

И стойността по подразбиране за това е 8 часа.

person spencer7593    schedule 22.05.2014
comment
И аз си помислих така, но на друга кутия (същата конфигурация, ръчно редактирах тази по-горе до 100), интерактивното време за изчакване е 28800, но виждам спящи процеси на 190584 години:\ - person concept47; 22.05.2014