【问题标题】:Create mySQL database through ssh in a bash script在 bash 脚本中通过 ssh 创建 mySQL 数据库
【发布时间】:2012-10-05 23:38:21
【问题描述】:

我想使用 bash 脚本通过 ssh 在远程服务器上创建一个数据库。像这样的

#!/bin/sh
ssh user@example.com 'mysql -h example.com -uroot -pMYPASSWD -e "CREATE DATABASE $1;"'

这样我就可以在终端中运行它了

$ myBashScript nameOfNewDatabase

【问题讨论】:

  • 试试这个:ssh user@example.com "mysqladmin create $1"
  • manpagez.com/man/1/mysqladmin 提供选项的详细信息,例如--user=root --password=MYPASSWD 等
  • 得到错误 bash: mysqladmin: command not found,当我尝试我在 desc 中编写的那个时得到了相同的结果,但是安装了 mysql。我会检查是否安装了mysqladmin。
  • Mysqladmin 已安装,但是当我尝试使用 ssh user@example.com "mysqladmin create $1" 远程运行命令时,它给了我上面的错误。
  • 请注意,“mysqladmin”不是本地的,而是安装在服务器上的。尝试 ssh user@example.com "/path/to/mysqladmin create $1" 之类的方法,忘记依赖远程 PATH 设置..

标签: mysql bash shell unix ssh


【解决方案1】:

以下脚本可以远程执行任意命令

#!/bin/bash
# call mysql on a remote server to execute the given command 

# show usage and exit
usage() {
  echo "$0 server sql-command"  1>&2
    exit 1
}

# check number of arguments
if [ $# -lt 2 ]
then
  usage
fi

# get server name and sql command
server="$1"
sql="$2"

# copy command to a temporary file
tmpsql="/tmp/sql$$"
echo "$sql" > $tmpsql

# copy command file to server
scp $tmpsql $server:$tmpsql
# run command remotely with removing command file afterwards
ssh $server "mysql -uroot -pPASSWORD < $tmpsql;rm $tmpsql"
# remove local copy of command file
rm $tmpsql

【讨论】:

  • 太棒了!那么,它 scp 是一个脚本文件到服务器,然后执行它?今天晚些时候我会检查一下。
  • 它抛出了我:bash: mysql: command not found 我在服务器上缺少一些设置吗?
  • 您需要确保在 ssh 会话中设置 PATH 或在脚本中指定 mysql 的完全限定名称。在 ssh 终端会话中使用“which mysql”来查找它,例如>哪个mysql /usr/local/mysql/bin/mysql
  • 所以在服务器的 bash 配置文件中设置 PATH 并没有帮助,我还必须以某种方式在这个脚本中声明它?那要怎么做呢?
  • 使用 macports 我必须将 PATH 声明放在 .ssh/environment 例如PATH=/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin
猜你喜欢
  • 2012-04-14
  • 2019-05-20
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2018-04-25
  • 2011-12-27
相关资源
最近更新 更多