近期接触到一些mysql问题,最大连接数更改,进程监控,定时删sleep进程等
遇到_mysql_exceptions.OperationalError: (1040, 'Too many connections') 问题
此报错的含义是太多的链接,超出了mysql
默认的最大链接数,此时我们可以通过更改mysql
设置解决此问题
查看最大链接数然后修改最大链接数
需要注意的是命令重设的一些参数,在mysql重启后,会恢复到原来的默认值,如果想永久修改,需更改/etc/my.cnf
mysql> show variables like 'max_connections'; #查看mysql最大连接数
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> set global max_connections=1000; #修改最大连接数
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show global status like 'Max_used_connections'; #查看服务器响应最大连接数
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 47 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> show status like 'Threads%'; #查看当前数据库运行状态
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 0 |
| Threads_connected | 5 |
| Threads_created | 79069 |
| Threads_running | 1 |
+-------------------+-------+
4 rows in set (0.00 sec)
写脚本定时杀掉sleep的进程,缓解数据库负载压力
查看mysql内部进程
mysql> show processlist; #查看进程列表
+-------+------+-----------+------+---------+------+-------+-------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+------+-----------+------+---------+------+-------+-------------------+
| 79109 | root | localhost | db_1 | Sleep | 91 | | NULL |
| 79117 | root | localhost | db_1 | Sleep | 91 | | NULL |
| 79122 | root | localhost | db_1 | Sleep | 2 | | NULL |
| 79169 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+-------+------+-----------+------+---------+------+-------+-------------------+
4 rows in set (0.00 sec)
killsleep.sh脚本
echo "show processlist" | mysql -uroot -p1111 | grep Sleep | awk '{ if( $6> 60 ) print ("kill ", $1,";")}' | mysql -uroot -p1111
脚本内容 -u用户名 -p密码
脚本的执行内容是 在mysql中执行 show processlist | 进入mysql的账号密码 |获得的列表选取含 Sleep的行 |然后执行 awk 语句 1 id 根据id 杀掉进程kill | 再进去mysql 因为是循环 每次都需要 进入
然后执行定时任务就好
[moic@localhost /]$ crontab -e #写入定时任务
5 * * * * cd /home/user/moic/test && sh -x killsleep.sh >> error.log
#保存即可
#就会每小时05的时候执行一次 可以根据自己需求调整定时任务执行周期