MySQL语句小结(二)

近期接触到一些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的时候执行一次 可以根据自己需求调整定时任务执行周期
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,053评论 0 19
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,568评论 0 5
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,163评论 0 23
  • 文/tangsl(简书作者) 原文链接:http://www.jianshu.com/p/2b993a4b913e...
    西葫芦炒胖子阅读 3,810评论 0 5
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,853评论 0 3