1. 在 my.cnf 中配置:
interactive_timeout=300
wait_timeout=300
重启 mysqld, 通过 show vairables
mysql> show variables like ‘%timeout%’;
+—————————–+———-+ | Variable_name | Value | +—————————–+———-+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 300 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 60 |
| wait_timeout | 300 |
+—————————–+———-+
13 rows in set (0.00 sec)
能看到已经生效,但 mysqld 并不会在 300时杀掉 sleep 超过 300的连接。
2. 在 mysqld 的其中脚本 mysql.server 中增加:
other_args=”$other_args –explicit_defaults_for_timestamp –wait_timeout=300 –interactive_timeout=300″;
重启 mysqld 后, 通过 show variables 看, 参数无变化, 但当某个查询连接超过 300 时会被强行关闭。
为何? 配置文件中的指令不生效而命令行参数的指令则生效?