2015-05-13 16 views
2

即使关闭我的电脑后,是否有办法在服务器上运行SQL查询?使用MySQL在后台运行SQL查询

我从一位同事那里听说有,她希望我这样做。我相信她说它被称为“屏幕”?

+1

烨不给空间存在的Linux屏幕命令,只需在终端输入屏幕,然后它会打开一个新的终端(新画面),然后运行SQL命令然后按Ctrl + d然后从ssh断开它仍然会在后台运行u可以通过登录到ssh并键入screen -r – Vivek

+0

再次检查什么样的查询?根据服务器版本和配置,还有EVENT。 – Uueerdo

+0

我试图用Ctrl + D关闭它,但它似乎没有工作。 –

回答

6

我打算假设您正在对服务器执行ssh操作,并且希望能够关闭本地工作站。

您可以使用nohup和后台进程。了解mysql命令的-e选项也很有用。

因此,像这样:

nohup mysql <options> -u <user> -p <pass> -e 'Insert Query Here' & 
  • nohup是“无挂”,即还没有结束的时候我 断开连接的过程。

  • mysql ... MySQL命令你通常运行 连接,只需添加-e选项,而无需打开 MySQL的会话

  • &运行查询启动进程在后台

我不确定这个BUT: 如果你不想在命令中输入你的密码,运行命令时不需要输入密码,输入fg密码提示应该回来,输入哟我们的密码,ctrl-z将发送过程回到背景,然后您可以断开连接。

+0

最好的办法是: nohup mysql -u -p -e'你的sql语句在这里'>/dev/null 2>&1 –

+1

@ShahadatHossainKhan,为什么更好?如果没有重定向,任何消息或错误都会转到nohup.out,因此您可以查看查询是否工作或失败。 – dan08

+0

在沉默运行方面,但如果你想调试它不是一个好方法我同意 –

2

如果您发现您遇到使用nohup问题与mysql - 我找到了这个网页上通过@ dan08的answer所引发的替代解决方案,以及@节点的answer关于把一个已经运行的进程到后台,从另一个问题上的SO 。


我已经发现,尝试使用nohup mysql...到“背景”长时间运行mysql命令的建议时,我正尝试的远程MySQL服务器连接到拒绝连接。当运行相同的mysql命令而没有将其前缀为nohup时,连接成功并且mysql命令按预期工作。

因此,我寻找了替代方法来实现能够运行长时间运行的SQL命令(或SQL命令集)的同样的最终结果,而不用担心如果从shell会话断开连接的进程终止或如果网络问题导致远程服务器断开连接。这项研究导致了下面提出的工作解决方案:

  1. 运行您的mysql命令,好像您想要在前台运行它;例如:mysql <options> -h <host> -u <user> -p -e "source /absolute/path/to/commands.sql" <database name> 2>&1 > ./mysql_output.log
  2. 当询问时,在MySQL命令提示符处输入相关密码以指定<user>(这是通过在上面的mysql命令中包含-p标志触发的)。
  3. 立即按Ctrl + Z暂停当前进程,在这种情况下为mysql
  4. 运行bg命令将当前挂起的进程移动到后台并恢复处理。
  5. 运行jobs命令列出当前在shell会话中运行的作业(如果在当前会话中没有任何其他后台进程正在运行,则可能只列出一个作业)。如果您只有一份工作正在运行,请在此列表中注明mysql的作业编号,如果编号为1
  6. 最后但并非最不重要的是,运行disown -h %<job number>命令,因此disown -h %1(假设上述步骤#5中获得的作业编号为1)。这最后一条命令非常重要,因为它将当前shell会话与我们刚刚移入后台的mysql进程分离,以便在终端shell会话结束时不会终止进程mysql。如果没有呼叫disown,现在在后台运行的mysql进程仍然可能在终端会话结束时被杀死。

命令的上述序列有效地让你一个长期运行的呼叫转移到mysql到后台,并没有进程终止,如果您关闭终端会话或者从远程断开模仿到nohup mysql...通话服务器。如果您发现运行nohup mysql...在您的情况下工作良好,因为它肯定是更简单快捷的方法,但至少在我们的应用程序/服务器环境中,我们无法成功使用nohup mysql...

上面的顺序还应该让您更好地控制执行mysql命令,因为您最初在前台运行该命令;例如在前台运行mysql将允许您在MySQL提示下安全地输入您的MySQL连接密码,而无需在命令行上提供纯文本密码(这可能是某些托管/服务器环境中的重要安全考虑因素,特别是共享主机,其中在命令行中输入的密码可能以日志文件(例如〜/ .bash_history或类似文件)结尾。另外,在前台运行该命令,将允许您在MySQL命令移入后台之前查看并响应任何连接或其他错误。

此信息还必须在此页面上@ dan08的answer,以及@Node的answer关于将已运行的前台进程置于后台,以帮助激发此处提出的解决方案。

希望这个提议的解决方案能够帮助其他发现自己处于类似情况的人,其中运行nohup mysql...不能按预期工作。

0
nohup mysql -h [host_ip_addr] -u [username] -p[password] [database_name] -e "sql_query" & 

注:后-p