如何在不退出mysql的情况下中断mysql命令行工具中的长查询?

时间:2009-01-31 05:35:20

标签: mysql command-line

在调试SQL语句时,如果我在使用输出大量结果的mysql命令行时意外执行查询(即使查询本身在合理的时间内执行),我知道的唯一方法就是停止无休止的流输出是CTRL-C。

不幸的是,这让我回到shell中,迫使我登录并再次选择数据库。

为了避免这种情况,我开始使用 - sigint-ignore 选项运行mysql,以便忽略CTRL-C。

现在我想要一种中断这些长查询输出的方法。

是否有键盘快捷键可以执行此操作?

5 个答案:

答案 0 :(得分:20)

不是键盘快捷键。

唯一的选择是打开另一个会话,使用SHOW PROCESSLIST,然后使用KILL QUERY您要终止的会话。

您还可以使用mysqladmin命令行工具发出这些命令。

无论哪种方式,都需要您登录。因此,与按Ctrl-C相比,它没什么优势。

答案 1 :(得分:17)

您可以使用--pager将输出传递给less等寻呼机,以便您控制输出。不仅仅是杀死它,还有分页,搜索甚至存储输出比终端窗口更好。

还有--safe-updates-U开关又名--i-am-a-dummy,可以保护您免受无子updatedelete的攻击,并且自动限制选择为1000(可以用select_limit修改。

默认情况下,~/.my.cnf可以设置所有这些。

[mysql]
pager
safe-updates

答案 2 :(得分:12)

从当前的mysql文档:

  

从MySQL 5.1.10开始,键入Control-C   导致mysql试图杀死   目前的声明。如果这不可能   完成,或再次键入Control-C   在语句被杀之前,mysql   退出。以前,Control-C引起了   mysql在所有情况下退出。

由于我使用的是5.0.67版,似乎更新mysql将是最好的解决方案。然而,我接受了Schwern的答案,因为它很快实现并且像梦一样工作。

答案 3 :(得分:4)

有点晚,但也许我的回答会帮助别人。

通过命令行终止具体mysql查询的方法是:

  1. 通过以下命令识别该查询的进程ID:mysqladmin processlist
  2. 假设Id是5736748,要杀死查询,你必须输入:mysqladmin kill 5736748

答案 4 :(得分:2)

使用mysql --sigint-ignore

要清除一行,请使用 control + U