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

rwi*_*red 25 mysql command-line

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

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

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

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

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

Bil*_*win 20

不是键盘快捷键.

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

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

无论哪种方式,它都要求您登录.因此,与仅按Ctrl-C相比,它没有多大优势.


Sch*_*ern 17

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

还有一个--safe-updates或者-U开关也--i-am-a-dummy可以保护你免受无子句updates和deletes的影响,并且自动限制选择为1000(可以用select_limit修改).

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

[mysql]
pager
safe-updates
Run Code Online (Sandbox Code Playgroud)


rwi*_*red 12

从目前的mysql文档:

从MySQL 5.1.10开始,键入Control-C会导致mysql尝试终止当前语句.如果无法执行此操作,或者在语句被终止之前再次键入Control-C,则mysql将退出.以前,Control-C导致mysql在所有情况下退出.

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


Jes*_*sta 5

有点晚了,但也许我的回答会对某人有所帮助。

通过命令行终止特定 mysql 查询的方法是:

  1. 运行mysqladmin processlist通过命令查找查询的进程id

  2. 运行mysqladmin kill <query_id>

    假设查询 ID 为 123456789,您只需要运行: mysqladmin kill 123456789