首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python关闭睡眠MySQL连接?

如何使用Python关闭睡眠MySQL连接?
EN

Stack Overflow用户
提问于 2017-02-16 07:25:29
回答 1查看 1.7K关注 0票数 1

下面是我尝试过的一个总结:

您可以在shell脚本中这样做,但如果您的服务器运行时启用了--secure-file-priv选项,则无法做到这一点。我也不想让它失效。

不过,为了完全公平起见,--安全文件-priv允许您导出到某个目录。你可以做一个

代码语言:javascript
复制
show global variables like '%secure%';

您将获得允许将MySQL结果集直接写入文件的路径。

1. Shell脚本要求-安全-禁用文件

代码语言:javascript
复制
mysql -e "select concat('KILL ',id,';') from information_schema.processlist where Command =    'Sleep' AND user = 'root' into outfile '/tmp/sleep_processes.txt'"
mysql -e "source /tmp/sleep_processes.txt;"
rm -rf /tmp/sleep_processes.txt

2. Percona's pt-kill

使用Percona的pt-kill终止休眠连接

代码语言:javascript
复制
pt-kill --match-command Sleep --kill --victims all --interval 10

3.用编写的Python脚本

一个Python脚本,它列出了在Pandas框架中要杀死的所有查询。但是如何在Pandas框架中执行每个命令。

代码语言:javascript
复制
import MySQLdb as mdb
import pandas as pd
con = mdb.connect('localhost', 'root', 'password', 'mydatabase');
with con:
 cur = con.cursor()
 cur.execute("select concat('kill ',id,';') sleeping_connections FROM information_schema.processlist isp WHERE Command = 'Sleep' and time > 60")
 rows = cur.fetchall()
 df = pd.DataFrame( [[ij for ij in i] for i in rows] )
 df.rename(columns={0: 'Sleeping Connections'}, inplace=True);
 print(df.head(10))
EN

回答 1

Stack Overflow用户

发布于 2017-02-25 01:52:36

您可以通过自己的文本处理跳过临时文件(从而跳过安全文件-priv问题)。这使得shell脚本在不需要禁用安全文件-priv的情况下可行。

代码语言:javascript
复制
IDS=$(mysql -Be 'show processlist' | awk '$5 ~ /Sleep/ {print $1}')
for i in $IDS; do
    mysql -Be "kill $i"
done

或者你可以在一条线上做:

代码语言:javascript
复制
mysql -Be 'show processlist' | awk '$5 ~ /Sleep/ {print $1}'| xargs -n 1 -i%% mysql -Be "kill %%"

"-B“调用”批处理模式“,这消除了在运行mysql命令时通常得到的漂亮装箱。这样,您就可以使用简单的文本处理来扼杀一切。

请注意,这两种方法都以编写的方式与服务器建立了多个连接(一个用于获取进程,另一个用于每个进程)。如果这在您的环境中很重要,您可以重写它以在一个连接中发出所有的终止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42267448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档