mysql wait_timeout sleep_MySQL / MariaDB 设定 wait_timeout 限制 sleep 连线

当一些 PHP 开启 MySQL 连线后, 没有成功关闭 MySQL 连线, 会有一大堆 sleep 的 process, 在 MySQL 可以执行以下指令查看:

mysql> SHOW PROCESSLIST;

执行上面的 MySQL 指令会出现很多 Sleep 的连线, 当这些 Sleep 的连线过多时, 很容易会触及 max_connections 的限制, 出现 too many connections 的错误。

在 MySQL 限制连线逾时的变量是 wait_timeout, 这个变量的默认值是 28800, 单位是秒, 即 8 个小时。这个数值真的十分大, 因为预计应该不会有程式每次执行要用上 8 个小时吧。

要解决这个问题, 只要降低 wait_timeout 的数值, 那么每个 process 会在超过这个限制的秒数后, 自动将它 kill 掉。

首先需要先用 root 登入 MySQL:

$ mysql -u root -p

登入后输入以下 MySQL 指令, 将 wait_timeout 及 interactive_timeout 设定成 300, 即每个连线最多保留 300 秒:

mysql> SET @@GLOBAL.wait_timeout=300

mysql> SET @@GLOBAL.interactive_timeout=300

这时 wait_timeout 及 interactive_timeout 的设定便会立即生效, 但当下次重新启动 MySQL 后便会回复使用默认值, 需要修改 my.cnf 设定:

$ sudo vi /etc/my.cnf

在 [mysqld] 段落加入 wait_timeout 及 interactive_timeout 的设定, 即改成类似这样:

[mysqld]

interactive_timeout=300

wait_timeout=300

在 vi 储存盘案及离开:

:wq

下次重新启动 MySQL 便会自动使用新设定。

你可能感兴趣的内容:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值