即使我的 ssh 连接断开,我的 MySQL 查询还会继续运行吗?

njp*_*njp 16 ssh mysql

我已经通过 SSH 连接到服务器并登录到 mysql,并要求它运行一个查询(其结果转储到 CSV 中),这可能需要一个多小时。尽管我已经指示我的客户端每 60 秒发送一次空数据包以保持会话处于活动状态,但我仍然怀疑 mysql 查询/进程可能会终止,所以我的问题是:

  1. 取消的 ssh 会话(由于不活动)会终止 mysql 查询进程吗?
  2. 我怎样才能确保这不会发生 - 空包每 60 秒发送一次就足够了吗?

Chr*_*own 9

大多数 shell 在退出时将 SIGHUP 发送到前台进程组(并且在某些后台进程中,在 bash 中,这是由 shell option 控制的huponexit),这可能会导致它死亡,具体取决于您的 mysql 客户端如何处理。

nohup如果你的 shell 退出,你可以运行你的命令,让它在你的 shell 退出时由 init 重新设置父级,无论你的 shell 是否发送 SIGHUP(被 init 重新命名为与 nohup 没有特别相关的 - 只是它已经超过了它的父级)。

可能是一个更可口的解决办法是使用tmuxscreendtach或类似的运行客户端在你的shell和控制终端抽象出来。这样,如果您的 shell 断开连接,您只需重新连接到您在其中运行查询的会话。

一般来说,keepalive 数据包无关紧要,连接不会无缘无故终止。更紧迫的问题是由于其他原因(网络故障等)导致客户端和服务器之间的连接丢失。