在mysql命令行程序中修复Control-C?


10

mysql命令行中,按Control-C将取消程序,并使您返回bash。在中psql,用于postgres的它将终止当前查询,并且不会停止psql程序。有什么办法可以Control-C在mysql程序中获得psql样式的行为?我一直发现自己Control-C习惯养成压力,不得不重新登录mysql。

Control C不会杀死bash,并在您按下它时将您注销。我认为这是一件好事。Control-C表示“停止您正在做的事情”。

Answers:


7

如果在执行查询期间在5.1中按Ctrl-C,它将停止执行并显示消息“查询执行被中断”。

    mysql>插入C SELECT rand()* 1000,sha1(rand())FROM c;
    查询被Ctrl + C中止
    错误1317(70100):查询执行被中断

进一步的Ctrl-C新闻杀死了客户。

如所提到的,较旧的版本死得很惨,所以请尽可能升级 :)

编辑:

看起来它是在5.0.25(和5.1.10)中添加的。


2
它仍然有相当愚蠢的行为。在查询过程中按CTRL + C时,它将取消查询。当您在提示符下按CTRL + C时,它不应执行任何操作,并且不退出MySQL。当您在Bash提示符下按CTRL + C时不执行任何操作时,它会打印新行,但基本上不执行任何操作。
尼尔2010年

实际上,我希望它确实是psql所做的:如果您正在进入查询的中途,也许已经输入了几行,并且您意识到自己犯了一个错误并想中止输入,然后按CTRL + C应该清除回到提示。
2014年

我会说清楚:即使在5.5版中,ctrl-C 仍然会让您退出mysql CLI。安迪的答案(至少对我来说)有点含糊,但如果让您感到新版本修复了此问题,您将被误导。
ndemou 2014年

@ndemou您在哪个平台上?我的答案已在RHEL5上进行了测试。
安迪

@Andy已在Ubuntu 12.04上进行了测试。您正在编写“看起来像是在5.0.25中添加的”。您认为添加了什么?那是你的答案中我不理解的部分。另请参阅下面的我的答案。
ndemou 2014年

13

就像安迪说的那样,它在更高版本中已修复。

在旧版本中没有等效的键盘快捷键。

但是您可以使用以下CLI标志阻止它的发生:

--sigint-ignore

Ignore SIGINT signals (typically the result of typing Control-C).

要注意的是,--sigint-ignore也删除了停止长时间运行的查询的功能。哦! 并没有在更高版本(<= 5.5)AFAICT中修复与该问题相关的任何内容。看下面我的回答。
ndemou 2014年

5

如果在行尾添加\ c而不是使用Ctrl-c,则可以在不退出mysql的情况下终止该行。


3

简短的回答:截至2014年初,尚无办法在mysql中具有上述行为。请参阅相关的错误报告和dba.stackexchange中的页面,其中3个不同的人评论说它在v5.5中仍未修复。据我所知,经过长时间的搜索后,没有值得使用的解决方法(请参见下面的内容,为什么--sigint-ignore不好)。编辑安迪的答案时提到“看起来像是在5.0.25(和5.1.10)中添加的”。但是他可能被上述错误报告中日期为[2006年5月3日19:04]的评论所误导。

--sigint-ignore参数(请参见Dan Carley的答案)确实会阻止mysql在您按ctrl-C时将您放回外壳程序,但同时也会删除停止长时间运行的查询的功能

这是使您无法使用的可用性错误:-(确实很明显,而且可能非常容易修复,但是仍然需要很多年。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.