2016-08-25 59 views
2

我想流浪的规定,执行数据库上的一些查询来允许root登录任何主机,创建应用程序数据库,并创建应用程序的用户,这样的过程中执行一个脚本:逃离MySQL的报价在bash脚本

#!/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

否SQL文件不知道有关bash变量,然后 –

回答

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