在bash脚本中通过ssh创建mySQL数据库

在bash脚本中通过ssh创建mySQL数据库,mysql,bash,shell,unix,ssh,Mysql,Bash,Shell,Unix,Ssh,我想通过ssh和bash脚本在远程服务器上创建一个数据库。像这样的 #!/bin/sh ssh user@example.com 'mysql -h example.com -uroot -pMYPASSWD -e "CREATE DATABASE $1;"' 这样我在终端上就可以像 $ myBashScript nameOfNewDatabase 以下脚本可以远程执行任意命令 #!/bin/bash # call mysql on a remote server to execute th

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

#!/bin/sh
ssh user@example.com 'mysql -h example.com -uroot -pMYPASSWD -e "CREATE DATABASE $1;"'
这样我在终端上就可以像

$ myBashScript nameOfNewDatabase

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

#!/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
#/bin/bash
#在远程服务器上调用mysql以执行给定的命令
#显示用法并退出
用法(){
回显“$0服务器sql命令”1>&2
出口1
}
#检查参数的数量
如果[$#-lt 2]
然后
使用
fi
#获取服务器名称和sql命令
server=“$1”
sql=“$2”
#将命令复制到临时文件
tmpsql=“/tmp/sql$$”
echo“$sql”>$tmpsql
#将命令文件复制到服务器
scp$tmpsql$server:$tmpsql
#远程运行命令,然后删除命令文件
ssh$server“mysql-uroot-pPASSWORD<$tmpsql;rm$tmpsql”
#删除命令文件的本地副本
rm$tmpsql

试试这个:sshuser@example.com“mysqladmin create$1”提供了选项的详细信息,例如--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”并且忘记依赖远程路径设置..太棒了!那么,它是服务器的一个脚本文件,然后执行它?今天晚些时候我会查看它。它会抛出我:
bash:mysql:command not found
服务器上是否缺少某些设置?您需要确保在ssh会话中设置了路径,或者在脚本中指定mysql的完全限定名。在ssh终端会话中使用“which mysql”来查找它,例如>which mysql/usr/local/mysql/bin/mysqlSo在服务器上的bash配置文件中设置路径没有帮助,我也必须在这个脚本中声明它?如何做到这一点?对于macports,我必须将路径声明放在.ssh/environment中,例如PATH=/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin