【问题标题】:Install MySQL on Ubuntu Natty without password prompt and using shell variable as password在没有密码提示的情况下在 Ubuntu Natty 上安装 MySQL 并使用 shell 变量作为密码
【发布时间】:2012-07-13 07:05:11
【问题描述】:

我正在尝试通过 shell 脚本在 Ubuntu Natty 上安装 MySQL。但是,我一直遇到一个主要问题:当我尝试在 shell 脚本之外定义密码时。

下面是我的 shell 脚本的代码(我保存在 /etc/init.d/install_mysql 中:

export DEBIAN_FRONTEND=noninteractive
echo mysql-server-5.1 mysql-server/root_password password $dbpass | debconf-set-selections
echo mysql-server-5.1 mysql-server/root_password_again password $dbpass | debconf-set-selections
apt-get -y install mysql-server

所以我在终端输入的是:

dbpass="mysqlpass"
chmod +x /etc/init.d/install_mysql
/etc/init.d/install_mysql

MySQL 已安装,但它无需密码即可安装,因此我可以执行 mysql -uroot 之类的操作来访问 mysql(我不想要)。

有趣的是,如果我将密码作为常规文本放入 shell 脚本中,它就可以正常工作。因此,如果我的安装脚本如下所示,一切正常(即我必须指定密码才能访问 mysql):

export DEBIAN_FRONTEND=noninteractive
echo mysql-server-5.1 mysql-server/root_password password mysqlpass | debconf-set-selections
echo mysql-server-5.1 mysql-server/root_password_again password mysqlpass | debconf-set-selections
apt-get -y install mysql-server

有没有办法可以使用 shell 脚本变量在 shell 脚本中定义我的密码,而不是按字面输入密码?!

提前致谢。

编辑:

我刚刚将变量声明$dbpass="mysqlpass" 编辑为dbpass="mysqlpass"。这是一个错字。

【问题讨论】:

    标签: mysql linux ubuntu debconf


    【解决方案1】:
    $dbpass="mysqlpass"
    

    是的,这是几种错误。变量名不以$开头,除非导出,否则变量不会传递到子进程的环境中。

    dbpass="mysqlpass"
    export dbpass
    

    请注意,环境变量被视为共享数据的安全机制;您可能需要重新编写脚本以从标准输入读取密码,这样会更安全。

    【讨论】:

    • 这是一个错字,我很抱歉。我正在尝试你提到的关于使用导出的建议,我会告诉你的。谢谢。
    • 非常感谢。原来export dbpass 正是我想要的。它现在就像一个魅力。干杯。
    【解决方案2】:
    $dbpass="mysqlpass"
    

    应该是

    dbpass="mysqlpass"
    

    正如你所写,$dbpass 将被评估,并且没有被定义,所以作为一个空变量出来,归结为

    ="mysqlpass"
    

    好吧,既然是错字,那么这里就是答案:

    MySQL 查找环境变量 MYSQL_PWD: http://dev.mysql.com/doc/refman/5.0/en/environment-variables.html

    【讨论】:

    • 打错字了,抱歉。
    猜你喜欢
    • 2011-12-06
    • 2016-11-16
    • 2014-07-14
    • 2023-02-04
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多