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

时间:2013-05-30 12:20:11

标签: 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');"

基本上我想在设备ID 1& 2

上将标志更改为Y.

但脚本输出

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

2 个答案:

答案 0 :(得分:2)

只需将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行的尝试实际上并不是期望运行命令的有效语法。

此外:

  • 使用SSH密钥进行无密码登录,而不是在脚本中使用硬编码的root密码。
  • 考虑远程运行MySQL,例如mysql -h 10.0.0.2 -e "the query"
  • 使用SSH中的端口转发安全地连接到MySQL,例如在后台运行ssh -L 3307:localhost:3306 root@10.0.0.2,然后连接到localhost mysql -h 127.0.0.1 -P 3307上的TCP端口3307。

答案 1 :(得分:0)

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

相关问题