2009-11-03 359 views
2

问改写:的MySQL创建数据库和用户脚本

HOMEDIR="ftpuser" 
REMOTEIP="1.1.1.1" 
MYSQLPASS="password" 

Q1="DROP USER "$HOMEDIR"_shop;" 
Q2="DROP DATABASE "$HOMEDIR"_shop;" 
Q3="CREATE DATABASE IF NOT EXISTS "$HOMEDIR"_shop;" 
Q4="GRANT ALL ON "$HOMEDIR"_shop TO '"$HOMEDIR"_shop'@'localhost' IDENTIFIED BY '$MYSQLPASS';" 
Q5="GRANT ALL ON "$HOMEDIR"_shop TO '"$HOMEDIR"_shop'@'anotherip' IDENTIFIED BY '$MYSQLPASS';" 
# Need to grant permissions from another server as well 
Q6="FLUSH PRIVILEGES;" 
SQL="${Q1}${Q2}${Q3}${Q4}${Q5}${Q6}" 

echo $SQL 
echo " " 
ssh -p 8899 [email protected]$REMOTEIP "mysql -u root -p "$SQL"" 

我然后运行:

/root/testing/migratesite.sh 

并获得:

bash: DROP: command not found 
bash: CREATE: command not found 
bash: GRANT: command not found 
bash: GRANT: command not found 
bash: FLUSH: command not found 

我缺少什么?

+0

对我的作品中,MySQL 5.0.51,BASH 3.2.39。你是否在另一个脚本中运行它?如果通过命令行运行它,它会运行吗? – 2009-11-03 11:55:42

+0

我已经重做我的问题来解释我正在做什么,而不是我基于它的东西!希望有所帮助! – Lizard 2009-11-03 12:04:45

+0

我会说这个'ssh -p 8899 root @ $ REMOTEIP“mysql -u root -p $ SQL”“'因为引号而无法工作......但是我没有机器去试试它出来还有...试图绕过$ SQL的引号 – Bobby 2009-11-03 12:09:13

回答

3

你缺少引号和正确的MySQL客户端的命令行:

ssh -p 8899 [email protected]$REMOTEIP "mysql -u root -p -e \"$SQL\"" 

你需要逃避周围$ SQL变量,以便他们得到传递到远程shell的报价,否则他们得到当地解释shell(这就是为什么你没有找到DROP:命令没有找到,分号由shell解释)。另外,为了让mysql客户端执行命令,你必须传递-e命令行选项。

0

你有没有尝试这个办法:

ssh -p 8899 [email protected]$REMOTEIP "echo \"$SQL\" | mysql -u root --password=$SQL_PASS" 
+0

由于缺少引用,这也会失败,还有一个问题,那就是mysql客户端会将SQL解释为密码 – 2009-11-03 12:22:57

+0

是的,应该改变' p'到'--password = $ PASS_VARIABLE'。更正。 – Pascal 2009-11-03 12:58:23

+0

只要$ PASS_VARIABLE从参数中读取(而不是存储在脚本中)应该没问题。 – 2009-11-03 14:34:57