1

我正在尝试将其作为 EC2 实例上的启动脚本(以 root 身份运行)的一部分来执行

# mysqladmin -u root password mygreatnewpassword

为了调试它,我将整个命令回显到日志中,它是正确的。我在脚本中的命令之前做了一个“ps ax”,以确保 mysql 正在运行。我在密码周围用双引号和单引号尝试了它(应该没有关系,也没有)。无论我尝试什么,在脚本中都会出错

mysqladmin:连接到“localhost”的服务器失败
错误:“用户“root”@“localhost”的访问被拒绝(使用密码:否)”

但是当我在 shell 中从脚本中复制并运行完全相同的行时,它就可以工作了。而且我已经验证在命令运行之前没有 root 密码(在任何一种情况下)。

不可能我需要使用 -p,即使这就是错误的样子,因为当我从 shell 运行它时我不需要它。

我很困惑。

在任何人评论这不安全之前,事实并非如此。密码存储在作为启动的一部分安装的私有 EBS 卷上,并从该卷上的文件中提取并放入启动 shell 的环境中,然后在脚本中使用(而不是回显到 syslog 中)。然后卸载 EBS 卷。一旦该启动脚本结束,除了 mysql 之外,密码无处可寻。


更新:我只是尝试了这个(在 2.12.2 的 5.1 MYSQL 手册中找到)

mysql -u root <<EOF
UPDATE mysql.user SET Password = PASSWORD("$MYSQL_PWD") WHERE User = 'root';
FLUSH PRIVILEGES;
EOF

也没有工作,类似的错误并正在运行

mysql -u root

从 shell 让我连接得很好(我可以输入 UPDATE 和 FLUSH cmds),没有错误。

我开始认为 mysql 和 mysqladmin 正在做一些时髦的事情,比如从 tty 读取导致它们在从 shell 脚本中运行时失败。这将使我的启动脚本难以初始化。

4

3 回答 3

0

看起来这是不可能的。mysql 和 mysqladmin 不是完全可编写脚本的。

于 2012-04-09T00:11:24.113 回答
0

参考mysql_secure_installation(我安装的 /usr/bin )它在数据库和临时 mysql.cnf 文件中设置密码:以下是从文件中提取的内容,让您了解它在做什么。

#!/bin/ksh
config=".my.cnf.$$"
command=".mysql.$$"
do_query() {
    echo $1 >$command
    mysql --defaults-file=$config <$command
    return $?
}

make_config() {
    echo "# mysql_secure_installation config file" >$config
    echo "[mysql]" >>$config
    echo "user=root" >>$config
    echo "password=$rootpass" >>$config
}

rootpass="mynewpassword"
do_query "UPDATE mysql.user SET Password=PASSWORD('$rootpass') WHERE User='root';"
do_query "FLUSH PRIVILEGES;"
rm -f $config $command
于 2012-04-07T23:58:27.810 回答
0

好的。我只是在我的mac上设置mysql,并按照第一次使用mysqladmin命令设置mysql root密码的说明,就像这个问题的所有者一样。基本上情况和这里描述的完全一样。

所以实际上mysql在运行命令后接受新密码,在尝试以root身份登录时不接受密码。发生这种情况是因为有多个名为 root 的用户。

+------+-------------------+
| User | Host              |
+------+-------------------+
| root | 127.0.0.1         |
| root | ::1               |
|      | localhost         |
| root | localhost         |
|      | macbook-pro.local |
| root | macbook-pro.local |
+------+-------------------+

因此,我觉得有必要解决这个问题..

于 2014-10-24T02:32:42.257 回答