通过SSH从BASH编写MySQL脚本

8
我有一台CentOS服务器,希望可以从我的笔记本电脑上运行BASH脚本来进行脚本编写。
我要在本地运行一个脚本,它可以:
  • 通过SSH登录到服务器并执行一些MySQL语句
  • 复制所需文件到需要的位置
文件复制很容易,我可以做到。
但是如何通过SSH端口连接到MySQL服务器并执行语句呢?我认为我只是卡在了连接部分。执行语句时,我可以将其构建到变量中并批量执行。
我从我的笔记本电脑到这个服务器拥有SSH公/私钥对。

这是您要找的吗?http://www.wallpaperama.com/forums/_zwxwzy.html - mikevoermans
3个回答

9
您可以将要在远程计算机上运行的命令作为ssh的最后一个参数进行指定:
ssh user@remote 'mysql -u user ...'

问题在于,处理mysql命令中各种“转义可能会很麻烦。

我认为更好的方法是,在连接时打开到远程计算机的SSH隧道:

ssh -L 12341:127.0.0.1:3306 user@server &

这将连接您本地的12341端口到远程机器的3306端口(mysqld)。连接完成后,您可以从本地计算机连接它,例如:

mysql -h 127.0.0.1 -p 12341

您可以将SQL语句放入一个文件中,然后使用cat命令将其输入到mysql中:

cat commands | mysql -h 127.0.0.1 -p 12341

完成后不要忘记关闭SSH连接。

请注意,隧道连接需要远程服务器在其sshd_config中设置PermitTunnel "yes"


请问如何在Bash中终止SSH连接? - Man Man Yu
执行 "jobs" 命令将显示后台任务及其 ID,您可以使用这些 ID 与 kill 命令一起使用,例如 kill %1 - K. Norbert

7

只需使用ssh在远程服务器上运行mysql。例如:

ssh user@server 'mysql -uimauser -p imadb -e "select * from table"'

引号中的所有内容将通过ssh远程运行。


6

您可以按照@WishCow所说的方法操作,或者将所有MySQL语句放在一个.sql文件中,将此文件复制到服务器上,然后调用mysql来执行这些语句,类似于以下内容:

echo "show databases;" > test.sql
echo "use some_database;" >> test.sql
echo "show tables;" >> test.sql
scp test.sql remote-user@remote-server:
ssh remote-user@remote-server 'mysql -u mysql-user -pmysql-pass < test.sql'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接