通过bash脚本在远程服务器上执行mysql
我需要在远程服务器上执行mysql命令,但在执行实际的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');"
#!/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端口3307mysql-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
不应输出任何内容。