即使我关闭计算机,有没有办法在服务器上运行SQL查询?
我从一位同事那里听说有,她希望我这样做。我相信她说它被称为"屏幕"?
答案 0 :(得分:10)
我假设您正在服务器,并希望能够关闭本地工作站。
您可以使用+-------------+-----------------+-----------------+
| COLUMN_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE |
+-------------+-----------------+-----------------+
| PersonID | PK_Person | PRIMARY KEY |
| DateOfBirth | CK_Person | CHECK |
| DateOfDeath | CK_Person | CHECK |
+-------------+-----------------+-----------------+
和后台进程。了解mysql命令的nohup
选项也很有用。
这样的事情:
-e
nohup mysql <options> -u <user> -p <pass> -e 'Insert Query Here' &
用于“不挂机”#39;也就是说,当我没有结束这个过程
断开。
nohup
您经常运行的mysql命令
要连接,只需添加-e选项即可运行查询而无需打开
mysql会话
mysql ...
在后台启动该过程
我不确定这个但是:
如果您不想在命令中输入密码,请运行不带密码的命令,键入&
密码提示应该返回,输入密码,fg
将发送回程到后台,然后你可以断开连接。
答案 1 :(得分:7)
如果您发现nohup
使用mysql
时遇到问题 - 我在此页面上找到了受@ dan08&#39; answer启发的替代解决方案,以及@Node& #39; s answer关于将已经运行的进程从SO上的另一个问题放入后台。
我在尝试使用nohup mysql...
来建议背景&#39;一个长时间运行的mysql
命令,我试图连接的远程MySQL服务器拒绝连接。运行相同的mysql
命令而不使用nohup
作为前缀时,连接成功,mysql
命令按预期工作。
因此,我寻找了实现相同最终结果的替代方法,即能够运行长时间运行的SQL命令(或一组SQL命令),而不必担心如果我从shell会话断开连接,或者网络问题导致远程服务器断开连接。这项研究得出了下面提出的工作解决方案:
mysql
命令,就好像您想在前台运行它一样;例如:mysql <options> -h <host> -u <user> -p -e "source
/absolute/path/to/commands.sql" <database name> 2>&1 >
./mysql_output.log
<user>
的相关密码(这是由上面-p
命令中包含mysql
标志触发的。) / LI>
mysql
。bg
命令将当前暂停的进程移至后台,然后继续处理。jobs
命令列出当前在shell会话中运行的作业(如果您没有在当前会话中运行任何其他后台进程,则可能只列出一个作业)。从此列表中注明mysql
的作业编号,如果您只有一个作业正在运行,则可能为1
。disown -h %<job number>
命令,因此disown -h %1
(假设上面步骤#5中获得的作业号是1
)。最后一个命令非常重要,因为它将当前shell会话与我们刚刚移入后台的mysql
进程解除关联,以便在终端shell会话结束时mysql
进程不会被终止。如果没有调用disown
,那么现在在后台运行的mysql
进程可能会在您的终端会话结束时被终止。上述命令序列有效地模仿了对nohup mysql...
的调用,允许您将长时间运行的呼叫移至mysql
进入后台,如果关闭终端会话,则不会终止进程或从远程服务器断开连接。如果您发现在您的环境中运行nohup mysql...
非常有用,因为它肯定是更简单,更快捷的方法,但至少在我们的应用程序/服务器环境中,我们无法成功使用nohup mysql...
。 / p>
上面的序列还可以让您更好地控制执行mysql
命令,因为您最初在前台运行命令;例如,在前台运行mysql
将允许您在MySQL提示符下安全地输入您的MySQL连接密码,而无需在命令行上提供密码作为纯文本(这可能是某些托管中的重要安全考虑因素) / server环境,尤其是共享主机,其中在命令行上输入的密码可能最终会出现在日志文件中,例如〜/ .bash_history或类似内容。此外,在前台运行命令将允许您在MySQL命令移入后台之前查看并响应任何连接或其他错误。
还必须在此页面上显示@ dan08&#39; answer,并将@ answer关于将已经运行的前台流程放入后台,以帮助激发所提议的解决方案这里。
希望这个提议的解决方案能够帮助那些发现自己处于类似情况的人,其中nohup mysql...
无法按预期运行。
答案 2 :(得分:1)
nohup mysql -h [host_ip_addr] -u [username] -p[password] [database_name] -e "sql_query" &
注意:在-p
之后不要给出空格答案 3 :(得分:0)
我更喜欢这样:
mysql -u <user> -p<pass> -e 'Insert Query Here' &>> query.log & disown
示例:
mysql -u root -pmypassword -e 'UPDATE bigtable SET column = "value";' &>> query.log & disown
-p
后没有空格&>> query.log
将stdout和stderr都重定向到query.log
中(使用您的路径),否则整个输出将转换为终端机&
在后台运行命令disown
从当前终端分离命令,如果关闭终端,则命令在超时后不会消失您可以使用来控制命令
SHOW FULL PROCESSLIST;
您也可以使用
停止它KILL [id]; -- get the ID from previous command
答案 4 :(得分:0)
这是个好方法...
创建这样的环境,在尝试登录mysql客户端时不会提示密码。确保只需输入“ mysql”即可登录数据库,而无需从终端输入用户名和密码。
然后使用此命令-
nohup sh -c“ mysql -e'ALTER TABLE YourDatabaseName.TableName ADD anyColumnYouWantToAdd VARCHAR(50)NULL after anyOldColumn'”> / dev / null 2>&1&
注意:您必须提供数据库名称,否则还必须输入“ use database”命令。如果您使用带有引号的列,表或数据库名称,则可能会出现另一个问题。
如果要查看日志,只需使用日志文件而不是“ / dev / null”