如何在带前缀的 Bash 脚本中创建 MySQL 用户和数据库

how do i create mysql user and database in bash script with prefix

提问人:voidead 提问时间:4/24/2020 最后编辑:Cyrusvoidead 更新时间:4/24/2020 访问量:1340

问:

无论如何,是否可以对具有相同用户名的前缀下划线做同样的事情。

例如:-

#!/bin/bash
db_user=devdb
db_pass=`openssl rand -hex 16`
mysql -u root <<-EOF
CREATE USER '$db_user'@'localhost' IDENTIFIED BY '$db_pass';
GRANT ALL PRIVILEGES ON  `$db_user\_%` . * TO  '$db_user'@'localhost';
FLUSH PRIVILEGES;
EOF

在上面的脚本中,GRANT ALL PRIVILEGES 给出错误,我想要解决方案。

如果我在mysql根目录中使用以下命令,则没有变量目录,则没有错误。

GRANT ALL PRIVILEGES ON  `devdb\_%` . * TO  'devdb'@'localhost';

如果有人对此有解决方案,请回复。

MySQL Bash 行情

评论

0赞 Zak 4/24/2020
给出什么错误?GRANT ALL PRIVILEGES
0赞 Zak 4/24/2020
另外 -- 数据库在你面前存在吗?GRANT ALL PRIVILEGES
0赞 voidead 4/24/2020
第 3 行出现错误 1064 (42000):SQL 语法中出现错误;检查与您的MySQL服务器版本相对应的手册,了解在第1行的'* TO 'devdb'@'localhost''附近使用的正确语法
0赞 Jetchisel 4/24/2020
这可能是 shell 正在解释的,再添加一个以禁用它的特殊功能。backslash

答:

0赞 Hydes 4/24/2020 #1

尝试对变量使用双引号而不是单引号。

参考:Bash 中单引号和双引号的区别

评论

0赞 Hydes 4/24/2020
然后我猜正在发生的事情是,在你在这里字符串中,你直接将值一个接一个地传递给mysql shell(在这种情况下,mysql不会扩展变量,而是将它们字面意思是$db_user)。尝试一次,不要使用 here-string 进行确认。