mysql command为sleep时项目可以连接_Mysql中Sleep进程连接数过多问题解决

解决方法

批量删除 sleep 进程状态的连接数。

1)、一种直接在MySQL命令控制台操作:

mysql> show processlist;

mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='user1';

mysql> select concat('KILL ',id,';') from information_schema.processlist where user='user1' into outfile '/tmp/a.txt';

mysql> source /tmp/a.txt;

其中上面user1用户是“show processlist;” 命令下,User列对应最多的Sleep进程连接状态的用户。

注:如上面导出为指定文件路径报“ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement”错误。

bd72c65ec340c542e71e01273ec8fbd3.png

是由于MySQL在文件的导入、导出有个默认的文件路径。通过“show variables like '%secure%';”命令查看默认导入、导出文件路径。

e78cf9dfe22279be2831d9bb3b850761.png

从上面可看出默认路径为“/var/lib/mysql-files/”;所以改下导出文件路径:

c3291dd306a99b01d3b372c1a1209da2.png

然后在执行“source /var/lib/mysql-files/a.txt;”命令,接下来是出现一堆“Query OK, 0 rows affected (0.00 sec)”,执行成功。

2)、另一种是写Shell脚步方法,配合设置cron定时任务

#!/bin/sh

while :

do

sleep_num=`mysqladmin processlist -u user -ppassword -h 10.10.10.100 | grep -ie sleep |wc -l`

date=`date +%Y%m%d\[%H:%M:%S]`

echo $sleep_num

if [ "$sleep_num" -gt 100 ];then

for i in `mysqladmin processlist -u user -ppassword -h 10.10.10.100 | grep -ie sleep | awk '{print $2}'`

do

mysqladmin -u user -ppassword -h 10.10.10.100 kill $i

done

echo "sleep is too many more than 100, killed it " >> /tmp/sleep.log

echo "$date : $sleep_num" >> /tmp/sleep.log

fi

sleep 1

done

接下来设置个cron定时任务,设置多长时间跑一次。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值