【问题标题】:how do i create mysql user and database in bash script with prefix我如何在带有前缀的bash脚本中创建mysql用户和数据库
【发布时间】:2020-08-07 01:12:31
【问题描述】:

有没有相同的用户名前缀下划线做同样的事情。

例如:-

#!/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 root 中使用没有变量目录的以下命令,则没有错误。

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

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

【问题讨论】:

  • GRANT ALL PRIVILEGES 给出了什么错误?
  • 还有——数据库在你GRANT ALL PRIVILEGES之前存在吗?
  • ERROR 1064 (42000) at line 3: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '* TO 'devdb'@'localhost'' 附近使用正确的语法
  • 这可能是shell解释的backslash,再添加一个禁用它的特殊功能。

标签: mysql bash quotes


【解决方案1】:

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

参考:Difference between single and double quotes in Bash

【讨论】:

  • 那么我猜发生的事情是,在你的here-string中,你直接将值一个接一个地传递给mysql shell(在这种情况下,mysql不会扩展变量并将它们从字面上看为$ db_user)。尝试一次,不要使用这里的字符串来确认。
猜你喜欢
  • 2010-12-12
  • 2012-10-05
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
相关资源
最近更新 更多