我可以终止休眠的 MySQL 连接而不重新启动服务吗?

DDD
发布: 2024-11-10 04:57:03
原创
319 人浏览过

Can I terminate dormant MySQL connections without restarting the service?

终止休眠 MySQL 连接

无数连接长时间保持空闲状态(最多 5 分钟),造成严重问题。是否可以在不重启 MySQL 服务的情况下终止或关闭这些连接?尽管维护了旧版 PHP 系统,禁止在查询执行期间关闭连接,但 my.cnf 文件中的超时值是否应该从默认的 8 小时减少?

手动清理

进程ID可用于使用KILL命令手动终止连接:

mysql> show full processlist;
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| Id      | User       | Host              | db   | Command | Time  | State | Info                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| 1193777 | TestUser12 | 192.168.1.11:3775 | www  | Sleep   | 25946 |       | NULL                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+

mysql> kill 1193777;
登录后复制

但是,这种方法有潜力缺点:

  • PHP应用程序可能会遇到错误。
  • 如果连接资源不稀缺,最好不要管它们。

自动化清理

另一种解决方案是为 MySQL 服务器配置更短的 wait_timeout 超时和Interactive_timeout:

mysql> show variables like "%timeout%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600  |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)
登录后复制

可以使用以下命令设置这些超时:

set global wait_timeout=3;
set global interactive_timeout=3;
登录后复制

请务必记住,这些更改仅解决症状,而不是持久连接的根本原因。 PHP 脚本应正确配置为在完成后关闭连接,并且应禁用网络服务器的连接池。

以上是我可以终止休眠的 MySQL 连接而不重新启动服务吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板