mysql too many connections问题,kill掉所有锁表进程

说明:
因为线上mysql实例太多,也就经常会遇到Too many connections的问题。出现这种问题的时候业务已经出现问题。此时最重要的还是先恢复业务。这里可以先获取show innodb status和show full processlist的信息以便等会分析原因。当然要先能连得进mysql。可以通过临时将连接数稍微调大,让自己能登陆上去,一般这种情况下登陆的时候也会出现Too many connections的提示,那么该如何做呢?这时候可以在主上面写一个死循环不停的连接主mysql以保证自己能正常登录,如:while true;do mysql -uroot -ppassword -S /tmp/mysql_3306.sock;done

实现:
1.手动清除锁表进程

mysql> show processlist; //进到mysql后,可以看到一大堆sleep进程没有一千也有几百条,而且时间都很长。
| 106089637 | test | 192.168.2.8:44449 | TEST | Lock | 134 |
| 106089638 | test | 192.168.2.8:44451 | TEST | Lock | 4123 |
……
出来好几屏幕的, , 查询语句把表锁住了,.
mysql> kill thread_id; // kill掉第一个锁表进程, 依然没有改善. 既然不改善, 咱们就想办法将所有锁表的进程kill掉吧, 简单的脚本如下.

2.shell脚本批量清除锁表进程

#!/bin/bash
mysql -uroot -e "show processlist" | grep -i "Locked" >> locked_log.txt

for line in `cat locked_log.txt | awk '{print $1}'`
do 
echo "kill $line;" >> kill_thread_id.sql
done

现在kill_thread_id.sql的内容像这个样子
kill 66402982;
kill 66402983;
kill 66402986;
kill 66402991;
…..

好了, 我们在mysql的shell中执行, 就可以把所有锁表的进程杀死了.
mysql> source kill_thread_id.sql

当然了, 也可以一行搞定

#!/bin/bash
for id in `mysqladmin processlist | grep -i locked | awk '{print $1}'`
do
mysqladmin kill ${id}
done

附录:
当然,可以通过限制用户连接mysql的连接数也可以一直程度上缓存mysql实例多导致的锁表多问题。
# mysql -uroot -p
mysql> grant all on username.*to’databasename’@’localhost’ with MAX_USER_CONNECTIONS 4 MAX_CONNECTIONS_PER_HOUR 1000;  //WITH MAX_USER_CONNECTIONS 4,限制最大连接数;MAX_CONNECTIONS_PER_HOUR 1000,限制每小时最大连接数

MySQL "too many connections"错误是由于达到了MySQL的最大连接数限制而导致的。您可以通过以下几个步骤来解决这个问题: 1. 首先,您可以使用命令`show variables like '%max_connections%';`来查看MySQL允许的最大连接数。 这个值通常是由MySQL配置文件中的max_connections参数设置的,默认情况下为150。 2. 您还可以使用命令`show status like 'Max_used_connections';`来查看MySQL在当前运行期间的最高连接数。 如果这个值接近或等于最大连接数限制,那么可能是因为您的应用程序或数据库负载导致了太多的连接请求。 3. 如果您发现MySQL的最大连接数设置较低,并且您的应用程序需要更多的连接数来处理并发请求,您可以尝试增加最大连接数的限制。可以通过修改MySQL配置文件(my.cnf)中的max_connections参数来实现。 但是请注意,增加最大连接数也会增加系统资源的使用量,因此需要谨慎地评估您的服务器的硬件和资源限制。 4. 另外,您还可以通过优化您的应用程序和数据库查询来减少连接数。这可以包括使用连接池技术来管理数据库连接,以及优化代码和查询以降低数据库负载。 综上所述,解决MySQL "too many connections"错误的方法包括增加最大连接数限制、优化应用程序和数据库查询,以及使用连接池等技术来管理数据库连接。请根据您的具体情况选择适合的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Mysql报错:too many connections原因及解决方法](https://blog.csdn.net/B001XFX/article/details/132172241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [MySQL:Too many connections如何解决](https://blog.csdn.net/zhizhengguan/article/details/122083507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值