【问题标题】:mysql create database and user scriptmysql 创建数据库和用户脚本
【发布时间】:2010-12-12 14:48:53
【问题描述】:

问题重写:

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 root@$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

我错过了什么?

【问题讨论】:

  • 为我工作,mysql 5.0.51,BASH 3.2.39。您是否在另一个脚本中运行它?如果你通过命令行运行它会运行吗?
  • 我重做了我的问题,以准确解释我在做什么,而不是基于什么!希望有帮助!
  • 我会说这个ssh -p 8899 root@$REMOTEIP "mysql -u root -p $SQL"" 不能工作,因为引号...但是我还没有机器可以尝试...尝试逃避引号$SQL。

标签: mysql database bash scripting centos


【解决方案1】:

您缺少引号和正确的 mysql 客户端命令行:

ssh -p 8899 root@$REMOTEIP "mysql -u root -p -e \"$SQL\""

您需要对 $SQL 变量周围的引号进行转义,以便将它们传递给远程 shell,否则它们会被本地 shell 解释(这就是你得到 DROP: command not found,分号由 shell 解释的原因.) 此外,要让 mysql 客户端执行命令,您必须传递 -e 命令行选项。

【讨论】:

    【解决方案2】:

    你试过了吗:

    ssh -p 8899 root@$REMOTEIP "echo \"$SQL\" | mysql -u root --password=$SQL_PASS"
    

    【讨论】:

    • 由于缺少引用,这也会失败。这增加了mysql客户端将SQL解释为密码的问题。
    • 是的,应该将-p 更改为--password=$PASS_VARIABLE。已更正。
    • 只要 $PASS_VARIABLE 从参数中读取(而不是存储在脚本中)就可以了。
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多