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

标签 python mysql shell database-connection percona

以下是我尝试过的总结:

您可以在 shell 脚本中执行此操作,但如果您的服务器在启用 --secure-file-priv 选项的情况下运行,则您将无法执行此操作。而且我不想禁用它。

尽管如此,为了完全公平,--secure-file-priv 允许您导出到某个目录。你可以做一个

show global variables like '%secure%';

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

<强>1。 Shell 脚本需要禁用 --secure-file-priv

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 的 pt-kill

使用 Percona 的 pt-kill 终止 sleep 连接

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

最佳答案

您可以通过执行自己的文本处理来跳过临时文件(从而跳过 secure-file-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

或者你可以用一句话来完成:

mysql -Be 'show processlist' | awk '$5 ~ /Sleep/ {print $1}'| xargs -n 1 -i%% mysql -Be "kill %%"

“-B”调用“批处理模式”,这消除了运行 mysql 命令时通常会出现的漂亮装箱。这样,您就可以使用简单的文本处理来杀死所有内容。

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

关于python - 如何使用 Python 终止休眠 MySQL 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42267448/

相关文章:

python - 生产服务器上的 django (ubuntu)

MySQL 存储过程 : Executing prepared statement with IN parameter in select statement throws "Error Code: 1054 Unknown column"

linux - shell 脚本 - 如何进行多次读取?

scripting - 如何在Shell脚本中获取命令的打印信息

macos - 用于 mac 的 bash shell 脚本从文件生成单词列表?

python - iNotify 收到事件后如何关闭文件句柄

python - NetworkX - 阻止节点聚集 - 尝试 Scale/K 参数

python - __init__() 恰好接受 1 个参数(给定 3 个)Google 应用引擎

mysql - 使用 python 访问 json 值

mysql - SQL - 比较 Ajax 数组中的值,如果不在表中则删除它们