我正在尝试在Vagrant配置期间执行一个脚本,该脚本在数据库上执行一些查询以允许从任何主机进行root登录,创建应用程序数据库并创建应用程序用户,如下所示:
#!/usr/bin/env bash
sudo bash << EOF
export DEBIAN_FRONTEND=noninteractive
MYSQL_ROOT_PASS='mySecretPass'
MYSQL_APP_PASS='appSecretPass'
mysql --user='root' --password='${MYSQL_ROOT_PASS}' <<QUERY
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASS}';
CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON apdb.* to 'appuser'@'%' IDENTIFIED BY '${MYSQL_APP_PASS}';
QUERY
EOF
但是当我执行上面时,我得到错误:
ERROR 1133 (42000) at line 1: Can't find any matching row in the user table
我不太清楚如何在bash和mysql中进行转义。我一直在使用eval
来代替这里的文件,而在“和”引号之间有些混淆。
答案 0 :(得分:1)
无需执行sudo bash
,只需直接调用sudo mysql
并在命令行中使用$MYSQL_ROOT_PASS
的双引号:
#!/usr/bin/env bash
export DEBIAN_FRONTEND=noninteractive
MYSQL_ROOT_PASS='mysql'
MYSQL_APP_PASS='appSecretPass'
sudo mysql --user=root --password="$MYSQL_ROOT_PASS"<<QUERY
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASS}';
CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON apdb.* to 'appuser'@'%' IDENTIFIED BY '${MYSQL_APP_PASS}';
QUERY