Answers:
大多数shell在退出时将SIGHUP发送到前台进程组(在某些bash中,在后台进程中,也由shell选项控制huponexit
),这可能导致它死,具体取决于您的mysql客户端如何处理。
您可以运行带有前缀的命令,nohup
以使您的shell退出时由init对其进行重载,而不管您的shell是否发送SIGHUP(被init进行重载与nohup无关-只是它已经超过了其父级)。
可能更可口的解决方案是使用tmux
,或类似的方法来运行抽象化的客户机screen
,dtach
使其脱离Shell和控制终端。这样,如果您的Shell断开连接,则只需重新连接到运行查询所在的会话。
通常,keepalive数据包无关紧要,连接不会无缘无故地终止。更为紧迫的担忧是由于其他原因(网络故障等),客户端与服务器之间的连接丢失。
nohup
对您来说并没有太大用处,因为mysql REPL不会附加到终端上。尝试使用上面提到的一个多路复用器(或dtach),它们可能会更好地满足您的需求。
screen
当我套入一个盒子时,我已经开始运行会话,部分是为了防止这种情况发生,另外,我获得了多个选项卡,无法胜任它。如果由于某种原因断开了连接,则可以重新连接到我的屏幕会话。
更新资料
为了回答#2,我将mysql
在bash shell中通过屏幕会话运行。听起来很复杂,但这仅仅是:
$: screen
$: mysql
您可以编辑〜/ .screenrc文件以在屏幕会话的底部添加标题,以便您可以跟踪选项卡,重命名选项卡等。如果断开连接,则重新连接时只需运行
$: screen -d
这将显示所有分离的会话。要重新连接,只需运行类似
$: screen -r 551.pts-0.git
或屏幕会话的ID是什么。您就回到了上次停下来的地方。但是,您必须screen -d
以与启动屏幕会话相同的用户身份运行,只是fyi,或者当然是root。我不太确定,因为在我总是ssh之后sudo su -
,我不必对每个命令都进行sudo。
screen
是正确的,但它不能直接回答OP列出的两个问题。
nohup
在登录mysql时添加前缀,这将持久化内部运行的查询?