【问题标题】:Escaping mysql quotes in bash script在 bash 脚本中转义 mysql 引号
【发布时间】:2016-08-25 10:14:24
【问题描述】:

我正在尝试在 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 而不是这里的文档,并且有些混淆了 " 和 ' 引号之间的转义。

【问题讨论】:

  • No SQL 文件不知道 bash 变量然后

标签: mysql bash escaping vagrant


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2016-07-08
    相关资源
    最近更新 更多