2010-01-14 46 views
23

如何以编程方式停止正在运行的mysql查询?如何停止正在运行的mysql查询

我面临的问题是查询是使用用户提供的数据构建的,有时可能需要很长时间才能执行(大型表格有15至30万行)。我想为用户提供一个取消选项,但不知道如何停止正在执行的mysql查询。

该应用程序是一个Java applet-servlet:用户在applet中指定标准,该标准被传递给创建处理程序类以处理请求的servlet。这个处理程序类是独立的重新连接 - 查询 - 断开连接到MySQL。

鉴于此场景,如何取消正在运行的mysql查询?

+0

小心,如果你正在查询查询会导致你的表崩溃 – VKGS 2011-09-21 11:35:32

回答

39
SHOW PROCESSLIST; 
KILL <thread_to_be_killed>; 

参考文档了解更多详细

Show The Process List

Kill A Running Thread

+0

对于这种情况,使用KILL QUERY比KILL略胜一筹。这种方式查询被杀害,但不是连接 ref#在“http://stackoverflow.com/questions/3787651/how-can-i-stop-a-running-mysql-query”中的评论 – 2014-01-31 07:20:11

0

可以发出的MySQL通过MySQL提供的标准库特定命令和运行KILL QUERY。可能最好列出流程并确定首先需要杀死哪个线程。

根据您的应用程序,这可能会造成安全问题(因为您需要为连接的应用程序用户提供更多权限)。

2

需要单独的JDBC连接,这意味着您必须创建新的数据库处理程序实例。执行SHOW PROCESSLIST语句,然后遍历结果并针对给定用户找到的每个线程ID执行KILL语句。

我认为这样做的唯一可靠方法是每个用户都必须以不同的用户名登录数据库,然后获取该用户的所有线程ID并杀死所有线程。