清理mysql的sleep链接

清理mysql的sleep链接

— 单mysql虽然生产环境用的不多,但还是很有用的哦, 我来整理篇博客,哈哈, 前半描述部分是摘抄于前同事

前言

我们通过show processlist可以看到Command 列为sleep的连接,sleep表示正在等待客户端发送请求. 另外, 可以查看连接数设置的最大值,连接数可能超出设置值.

数据库在默认情况下,sleep超时时间一般会默认为8小时,8小时后mysql会把这些sleep连接从连接池中剔除,下次业务则需重连。可以根据业务情况,是否有超过8小时就已导致前端访问缓慢了.

提前总结

造成睡眠连接过多的原因?
1. 使用了太多持久连接(个人觉得,在高并发系统中,不适合使用持久连接)
2. 程序中,没有及时关闭mysql连接
3. 数据库查询不够优化,过度耗时。
当然,更根本的方法,还是从以上三点排查:
1. 程序中,不使用持久链接,即使用mysql_connect而不是pconnect
2. 程序执行完毕,应该显式调用mysql_close
3. 只能逐步分析系统的SQL查询,找到查询过慢的SQL,优化之

脚本分享

  • SHELL版
  • PHP版

SHELL版

#It is used to kill processlist of mysql sleep

#!/bin/sh
MYSQLDIR=/usr/local/mysql/bin
MYSQLTOOL=$MYSQLDIR/mysql
MYSQLUSER=myadmin
MYSQLPASS="password"
usage()
{
    echo "Usage: $0 ip port db_user"
    echo "Example: $0 1.1.1.1 3306 db_user"
    exit
}

if [ $# -ne 3 ];then
    usage
fi
hostip=$1
port=$2
user=$3
sleepid="SELECT ID FROM information_schema.PROCESSLIST t WHERE t.COMMAND='Sleep' and user='$3' and time >1000;"
echo $sleepid
 $MYSQLTOOL -h$hostip -u$MYSQLUSER -p$MYSQLPASS -P$port -e "$sleepid" >sleepIDs

while read sID
do
 echo $sID
$MYSQLTOOL -h$hostip -u$MYSQLUSER -p$MYSQLPASS -P$port -e "kill $sID"
done<sleepIDs 

PHP版

<?php
define('MAX_SLEEP_TIME', 1000);

$hostname = "ip:port";
$username = "username";
$password = "password";

$connect = mysql_connect($hostname, $username, $password);
$result = mysql_query("SHOW PROCESSLIST", $connect);
while ($proc = mysql_fetch_assoc($result)) {
    if ($proc["Command"] == "Sleep" && $proc["Time"] > MAX_SLEEP_TIME) {
        @mysql_query("KILL " . $proc["Id"], $connect);
    }
}
mysql_close($connect);
?>

参考资料

Kill mysql sleep proccessesWhy persistent connections are bad更多

时间: 2024-09-20 09:35:17

清理mysql的sleep链接的相关文章

怎么清理mysql日志?

  首先我们可以通过下面的命令来清理MYSQL日志: rm -f /usr/local/mysql/var/mysql-bin.* 然后重启自己的VPS即可,如果是LNMP用到: /root/lnmp restart 这样我们就删除了不需要的垃圾日志文件了,接下来如果我们需要禁止生成这些日志文件可以通过下面的命令. 通过ssh,然后登陆root找到 /etc/my.cnf 文件 log-bin=mysql-bin binlog_format=mixed 将上面的两行前面的"#"字符去掉

java获得mysql和oracle链接的类_java

本文实例讲述了java获得mysql和oracle链接的类.分享给大家供大家参考.具体如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectDB { private static final String MYSQL = "jdbc:mysql://"; private static final String ORA

go语言怎么和mysql数据库进行链接

 在网上找了一大堆例子,最后简化一下把,一下会从安装mysql开始,与大家分享一下如何用go链接服务器上的mysql 我用的是ubuntu系统 1,安装mysql:sudo apt-get install mysql-server (记住root的密码假设密码为root123) 2,进入mysql:mysql -uroot -p 然后输入密码 3,创建一个数据库:create database people; 4,给数据库people添加用户:GRANT ALL PRIVILEGES ON pe

linux系统中清理MySql的日志文件mysql-bin.00000

首先说明,mysql-bin.00000*类似的文件是mysql的日志文件. 通过命令  代码如下 复制代码 du -h –max-depth=1 / 查看根目录下每个文件夹所占用存储的大小,发现/var占用了快3G,进一步使用du命令,发现是存放mysql数据文件的文件夹占用了绝大部分空间,进入该文件夹,发现有很多mysql-bin.00000开头的文件,而且其中的某些达到了1G以上,google发现原来这些用户是mysql记录的日志文件,用于数据库崩溃后恢复数据和主从数据库进行数据同步的.如

本站清理了一些友情链接 201207_本站公告

最近发现不少友链网站做了大量的私服链接或销售链接,这样对于我们网站来说,贵站对我们已经没有任何好处,而我们却一直不愿意卖链接 我们一直以来都是以精品站为主旨,广告是为了维护网站的正常运营所需要的成本,所以为了我们长期发展考虑,凡跟我们做链接的网站,一经发现我们会权衡网站并考虑下掉链接,无法一一通知,感谢谅解. 下来摘自百度的说明 买卖链接的危害 众所周知,搜索引擎会对站点获得链接的数量和质量进行分析,从而做出对网站的评价,最终影响站点在搜索结果中的表现.在搜索引擎看来,站点的链接质量比数量更为重

用批处理实现自动备份和清理mysql数据库的代码_Mysql

有网友问我在win2003下如何自动备份MySQL数据库,既然是自动备份,那肯定得写脚本.我想了想,这个并不是很困难,是很容易实现的,备份可以用脚本实现,那自动又该如何实现呢?也很简单,就用windows自带的"任务计划"功能,设定一个时间,让系统定时跑脚本,不就实现了自动备份数据库的功能了吗? 不过到现在已经有很多的mysql备份软件,例如我比较喜欢使用的是护卫神的好备份软件. 下载地址:http://www.jb51.net/softs/42944.html 首先把脚本代码贴出来:

mysql optimize 清理碎片

---定期清理脚本 0 1  * * 4 root /root/qingli_mysql.sh [root@newmysql5 ~]# cat qingli_mysql.sh #!/bin/bash date=`date +"%Y-%m-%d %H:%M:%S"` echo $date >>/root/qingli.log tables=$(mysql -u root -p"tina" 2>/dev/null -e "select con

c++-vs下链接mysql数据库出错

问题描述 vs下链接mysql数据库出错 数据库初始化没有问题,可以连接 使用mysql_query出现问题,无法查询 代码如下: MYSQL_RES * result = NULL; CString temp ( "select username from user_login where username = "); MYSQL_ROW row; CString douhao("'"); int res; CString i_query = temp + dou

编译-Dev连接mysql出错,好像是库链接有问题。

问题描述 Dev连接mysql出错,好像是库链接有问题. 2C C:UsersADMINI~1AppDataLocalTempccf96B9s.o In function v_to_m(std::vector<stu* std::allocator<stu*> >&)':31 C:UsersAdministratorDesktopDEV-编译数据connect_mysqlconnect_mysql.cpp undefined reference tomysql_init'3