繁体   English   中英

在MySQL中通过bash添加用户

[英]Adding user through bash in MySQL

这是我第一次尝试在mysql终端中传递bash命令,我正在这样做:

每次安装应用程序与数据库进行交互时, 都会创建一个虚拟用户

但是,我所有的尝试都失败了,这是我的代码行:

new_user(){ mysql -u"$1" -p"$2" -e 'CREATE USER "$3"@"$4" IDENTIFIED BY "$5";
            GRANT ALL PRIVILEGES ON "$6".* TO "$3"@"$4";
            FLUSH PRIVILEGES; 
            exit;' &&
        echo `new MySQL USER has been created ..
            name:"$3" server:"$4" password:"$5" database:"$6"` ; }

但是,它给了我这个错误

 ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version
 for the right syntax to use near '"$4".* TO "$1"@"$2"' at line 1

我曾尝试使用-e但显示不成功。

如何在MySQL中传递bash变量?

更新:

感谢评论,我已经更新了引号的代码,但是仍然无法将变量传递给mysql终端。

new_user() {
    SQL="CREATE USER\"$3\"@\"$4\" IDENTIFIED BY \"$5\"; GRANT ALL PRIVILEGES ON \"$6\".* TO \"$3\"@\"$4\"; FLUSH PRIVILEGES; exit;"
    mysql -uroot -p1 -e "$SQL" &&
    echo new MySQL USER has been created ..  name:\"$3\" server:\"$4\" password:\"$5\" database:\"$6\"

}

您可以避免使用HEREDOC弄清楚如何对引号进行HEREDOC

要进行调试,请尝试将函数分成两部分。

gen_user_sql(){
  cat <<HEREDOC
   CREATE USER '$1'@'$2' IDENTIFIED BY '$3';
   GRANT ALL PRIVILEGES ON $4.* TO '$1'@'$2';
   FLUSH PRIVILEGES;

HEREDOC
}
new_user(){
   sqluser="$1"; shift
   sqlpswd="$1"; shift
   mysql -u"$sqluser" -p"$sqlpswd" -e "$(gen_user_sql $@)"
   echo "new user: $@"
}
# see the query
gen_user_sql user host id db
# actually run it
new_user sqlu sqlp user host id db

有新语法的一些注意事项:

  • $@传入的所有变量。 shift移除会是什么$1$@ (在shift之后, $1返回调用shift之前的$2
  • $(command)捕获的输出command ,在这种情况下,使用它作为字符串输入到mysql

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM