【问题标题】:How do I change the temporary root MySQL password using a bash shell script?如何使用 bash shell 脚本更改临时 root MySQL 密码?
【发布时间】:2017-07-11 19:52:30
【问题描述】:

我需要更改启动 MySQL 守护程序时创建的临时 root 密码。问题是临时密码有一些奇怪的字符(例如左/右括号)需要转义。现在,一般来说,有几篇文章(hereherehere)关于如何转义字符,但这篇文章是在使用 bash 脚本更改临时 MySQL root 密码的背景下进行的特殊个字符。

目前,我的脚本如下所示。

function startMysql {
    sudo service mysqld start
    echo "started mysql"

    export PW=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $11}')
    # export PASS=\'$PW\'
    echo "temporary password is $PW"
    mysqladmin -u root -p$PW password aaBB@@cc1122
    # the following doesn't work either
    # mysqladmin -u root -p$PASS password aaBB@@cc1122
    echo "changed mysql password"
}

请注意,临时密码可能如下所示。

  • BYkc*),ZM3-_

如果我在终端上输入以下内容,它会起作用。

mysqladmin -u root -p'BYkc*),ZM3-_' password aaBB@@cc1122

但在脚本内部,它失败了。以下是我尝试在$PW 周围加上单引号但没有成功的一些方法。

  • mysqladmin -u root -p"'$PW'" password aaBB@@cc1122
  • mysqladmin -u root -p\''$PW'\' password aaBB@@cc1122
  • mysqladmin -u root -p"$PW" password aaBB@@cc1122
  • mysqladmin -u root -p"\"$PW\"" password aaBB@@cc1122

关于我做错了什么有什么想法吗?

【问题讨论】:

  • echo "temporary password is $PW" 给你什么? mysqladmin -u root -p"$PW" password aaBB@@cc1122 应该可以正常工作。
  • 怎么会失败?
  • 控制台的回显显示为正确。但我仍然会出现身份验证失败,就好像我输入了错误的密码一样。

标签: mysql bash quotes single-quotes mysqladmin


【解决方案1】:

使用双引号确实对我有用:

password=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $11}')
mysqladmin --user=root --password="$password" password aaBB@@cc1122

【讨论】:

    猜你喜欢
    • 2017-07-02
    • 2016-04-06
    • 2012-06-29
    • 1970-01-01
    • 2012-02-06
    • 2015-12-14
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多