我一天多次输入相同的命令,因此认为编写shell脚本以节省重复可能是件好事。我还认为这可能是学习shell编码的一个好方法,因为我通常使用OOP语言。
代码应该打开到我的服务器的ssh连接,然后启动mysql并选择我想要使用的数据库。我努力使代码工作。我猜它是因为bash脚本在我的本地机器上,如果在远程机器上我需要以某种方式执行。我找不到任何如何做到这一点的例子。这是我的代码:
#!bin/bash
#Script to automate login to remote server and select specific mysql database
password="myPassword"
username="myUserName"
remoteuser="myUsername@my.se.rv.er.00"
echo "Attempting login to server.."
#attempt ssh connection to remote server...
status=$(ssh -o BatchMode=yes $remoteuser echo ok 2>&1)
#if connection is made...
if [[ $status == ok ]] ; then
echo "connection established"
echo "attempting mysql login..."
#attempt to start mysql and select my database
mysql --user=$username -p$password -Bse"USE mydatabase; show tables;"
elif [[ $status == "Permission denied"* ]] ; then
echo "Permission denied"
else
echo "other_error"
fi
当我运行这个时,我收到错误: ERROR 2002(HY000):无法通过socket' /var/run/mysqld/mysqld.sock'连接到本地MySQL服务器;
如何修复此代码?我正确地解释了这个错误消息:我的脚本不工作的原因是因为mysql命令是在我的机器而不是服务器上运行的?
代码的目的不是启动在我的服务器上运行的脚本,而是创建一个连接到我的服务器的完整脚本,确认连接,然后将我登录到远程机器上的mysql,以便然后我可以通过自己的终端继续处理它。
答案 0 :(得分:0)
您需要在SSH命令的上下文中运行命令。这可以通过bash here文档完成。见这里:http://www.tldp.org/LDP/abs/html/here-docs.html
示例:
ssh otherhost << EOF
./someaction.sh 'some params'
EOF