使用Shell脚本运行远程Mysql命令

时间:2017-12-14 16:54:08

标签: mysql shell

我正在尝试在我的shell脚本中运行一个ssh命令,它将在远程服务器上自动创建数据库,用户,密码等:

password=`date +%s|sha256sum|base64|head -c 32`
read -p "Enter staging folder name... e.g. xxxxxxxx:   " stagingdirectory
echo $stagingdirectory
read -p "Give the name for the database (this will be used in mysql)" dbname
echo $dbname
read -p "Give the name of the user for the database (this will be used in mysql)" dbuser
echo $dbuser

sqlstatement="mysql -uXXXXXXX -pXXXXXXXX -hXXXXXXXX -e "
sqlstatement+='"CREATE DATABASE IF NOT EXISTS $dbname;CREATE USER $dbuser@'%' IDENTIFIED BY '$password';GRANT ALL PRIVILEGES ON $dbname.* TO $dbuser@'%';FLUSH PRIVILEGES;"'

echo $sqlstatement
ssh -A $domainname@35.163.55.55 -e "$sqlstatement"

当我尝试运行此命令时,出现此错误:

这是返回的内容(我用XXXX替换了实际值):

错误的转义字符' mysql -udbadmin -pXXXXX -hXXXXX -e" CREATE DATABASE IF NOT NOT $ $ dbname; CREATE USER $ dbuser @%IDENTIFIED BY XXXXXX;在$ dbname上授予所有特权。* TO $ dbuser @%; FLUSH PRIVILEGES;"'。

我认为这是由于我的sql语句和字符串转义。

1 个答案:

答案 0 :(得分:2)

尝试更改行

ssh -A $domainname@35.163.55.57 -e "$sqlstatement"

ssh -A $domainname@35.163.55.57 "$sqlstatement"

从ssh手册中,见下文

  

-e escape_char

     
    

为具有pty的会话设置转义字符(默认值:'〜')。转义字符只能识别     一行的开头。逃亡                  字符后跟一个点('。')关闭连接;然后控制-Z暂停连接;然后是自己     发送逃脱字符 -                  一次。将字符设置为“none”将禁用任何转义并使会话完全透明。

  

在您的示例中,ssh没有获得有效的转义字符,您也不需要