MySQLSQL极简教程 · MySQL · MyBatis · JPA 技术笔记 教程 总结mysql 知识库

MySQL语句小结(二)

2020-01-09  本文已影响0人  MOIC_Qu

近期接触到一些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 语句 6是用时 循环识别 用时超过60的 拿到1 id 根据id 杀掉进程kill | 再进去mysql 因为是循环 每次都需要 进入

然后执行定时任务就好

[moic@localhost /]$ crontab -e #写入定时任务

5 * * * * cd /home/user/moic/test && sh -x killsleep.sh >> error.log

#保存即可
#就会每小时05的时候执行一次 可以根据自己需求调整定时任务执行周期
上一篇 下一篇

猜你喜欢

热点阅读