如何使用Python终止休眠的MySQL连接?

2024-09-27 01:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我尝试的总结:

您可以在shell脚本中执行此操作,但如果服务器运行时启用了--secure-file-priv选项,则无法执行此操作。我不想让它失效。在

不过,为了公平起见,--secure file priv允许您导出到某个目录。你可以做一个

show global variables like '%secure%';

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

1。Shell脚本需要--secure file priv disabled

^{pr2}$

2。Percona的pt kill

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

pt-kill --match-command Sleep --kill --victims all --interval 10

3。带有pandas的Python脚本

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

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))

Tags: import脚本框架ptpandasdfsleepcon
1条回答
网友
1楼 · 发布于 2024-09-27 01:29:54

您可以通过自己的文本处理来跳过临时文件(以及安全文件priv问题)。这使得shell脚本不必禁用secure-file-priv就变得可行

IDS=$(mysql -Be 'show processlist' | awk '$5 ~ /Sleep/ {print $1}')
for i in $IDS; do
    mysql -Be "kill $i"
done

你也可以这样做:

^{pr2}$

“-B”调用“批处理模式”,这消除了在运行mysql命令时通常会遇到的麻烦。有了它,您就可以使用简单的文本处理来消灭一切。在

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

相关问题 更多 >

    热门问题