在bash脚本中转义mysql引号

时间:2016-08-25 10:14:24

标签: mysql bash escaping vagrant

我正在尝试在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来代替这里的文件,而在“和”引号之间有些混淆。

1 个答案:

答案 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