【发布时间】:2018-09-03 05:33:24
【问题描述】:
一天中我多次键入相同的命令,因此认为编写一个 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): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
如何修复此代码?我正在正确解释此错误消息:我的脚本不起作用的原因是因为 mysql 命令正在我的机器上而不是服务器上运行?
代码的目的不是启动在我的服务器上运行的脚本,而是制作一个连接到我的服务器的完整脚本,确认连接,然后将我登录到远程机器上的 mysql 以便我可以继续通过我自己的终端进行处理。
【问题讨论】:
-
实际上,我已经经历了几次迭代,用 bash-x 调用它来观察它的行为,包括在 MySQL 行中使用 ssh 前缀。我仍然得到相同的结果。您无法从代码量判断尝试次数,因此您的评论和投票是轻率的
-
我怎么知道?您的问题中没有说明您的任何尝试或过程。
-
@Aaron,这个问题似乎是有效的。添加请求的信息有什么不同?
-
@AaronRumery 我不确定为什么失败的尝试与解决问题有关?在阅读堆栈上的帖子时,我的一般假设是人们提出问题是因为他们试图解决问题,而其他人回答问题是因为他们想帮助其他人学习和解决问题。没想到更复杂?到目前为止,知道我做错了什么只会帮助人们不回答错误。我假设回答的人知道我做错了什么,因为他们编写 shell 代码的时间比我长。
-
已经有很多通过 SSH 连接到远程服务器并运行 MySQL 命令的示例,这些示例可在 Stackoverflow 和各种网站上找到。