如何以编程方式停止正在运行的mysql查询?
我面临的问题是使用用户提供的数据构建查询,并且有时可能需要很长时间才能执行(大表15到3000万行)。我想为用户提供一个取消选项,但不知道如何停止当前正在执行的mysql查询。
应用程序是一个Java applet-servlet:用户在applet中指定条件,该条件传递给servlet,在servlet中创建处理程序类来处理请求。这个handler-class是自包含的re connect - query - disconnect to mysql。
鉴于这种情况,我该如何取消正在运行的mysql查询?
答案 0 :(得分:40)
SHOW PROCESSLIST;
KILL <thread_to_be_killed>;
有关其他详细信息,请参阅文档
答案 1 :(得分:2)
需要单独的JDBC连接,这意味着您必须创建新的数据库处理程序实例。执行SHOW PROCESSLIST语句,然后遍历结果并为给定用户找到的每个线程ID执行KILL语句。
我能想到的唯一可靠的方法是每个用户都必须使用不同的用户名登录数据库,然后获取该用户的所有线程ID并终止所有线程。
答案 2 :(得分:1)
您可以通过MySQL提供的标准库发出MySQL特定命令并运行KILL QUERY。可能最好列出流程并确定首先需要杀死的线程。
根据您的应用程序,这可能会产生安全问题(因为您需要为连接的应用程序用户提供更多权限)。