Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过bash脚本在远程服务器上执行mysql_Mysql_Bash - Fatal编程技术网

通过bash脚本在远程服务器上执行mysql

通过bash脚本在远程服务器上执行mysql,mysql,bash,Mysql,Bash,我需要在远程服务器上执行mysql命令,但在执行实际的mysql位时似乎遇到了问题 #!/usr/bin/expect -f spawn /usr/bin/ssh -t root@10.0.0.2 expect "password: " sleep 1 send "password\r" sleep 2 /usr/bin/mysql databasename -e "update device_log set status = 'Y' where device_id in ('1','2');"

我需要在远程服务器上执行mysql命令,但在执行实际的mysql位时似乎遇到了问题

#!/usr/bin/expect -f
spawn /usr/bin/ssh -t root@10.0.0.2
expect "password: "
sleep 1
send "password\r"
sleep 2
/usr/bin/mysql databasename -e "update device_log set status = 'Y' where device_id in ('1','2');"
基本上我想把设备id的1和2上的标志改为Y

但是脚本输出


无效的命令名“/usr/bin/mysql”

听起来好像
/usr/bin/mysql
不是该远程服务器上的
mysql
二进制文件的路径。您可以只使用
mysql
,假设二进制文件位于远程服务器的
路径中的某个位置。否则,您必须找出二进制文件的实际位置,并相应地更改绝对路径。

只需将
mysql
命令附加到
ssh
命令,即可一次性运行它,如下所示:

#!/usr/bin/expect -f
spawn /usr/bin/ssh -t root@10.0.0.2 /usr/bin/mysql databasename -e "the query"
expect "password: "
sleep 1
send "password\r"
我对
expect
不太了解,但我认为您在
mysql
行中的尝试实际上不是expect运行命令的有效语法

此外:

  • 您应该使用SSH密钥进行无密码登录,而不是在脚本中硬编码根密码
  • 考虑远程运行MySQL,例如
    MySQL-H10.0.0.2-e“查询”
    ,或
  • 在SSH中使用端口转发安全地连接到MySQL,例如运行
    SSH-L 3307:localhost:3306root@10.0.0.2
    在后台,然后连接到本地主机上的TCP端口3307
    mysql-h 127.0.0.1-P 3307

由于某些原因无法工作,输出。/log spawn/usr/bin/ssh-troot@10.0.0.2/usr/bin/mysql databasename-e“更新设备日志集状态='Y'其中设备id位于('1','2');”root@10.0.00.2的密码:root@box:/usr/local/sbin#@Lurch这很好,对吗<如果查询成功,则code>mysql
不应输出任何内容。