mysqladmin设置初始root密码在脚本中失败但在shell中工作

时间:2012-04-07 23:50:44

标签: mysql amazon-ec2 startupscript mysqladmin

我试图在EC2实例上作为启动脚本(以root身份运行)的一部分执行此操作

# mysqladmin -u root password mygreatnewpassword

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

  

mysqladmin:在'localhost'连接到服务器失败了   错误:'访问被拒绝用户'root'@'localhost'(使用密码:NO)'

但是当我从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脚本中运行时失败。这将使我的启动脚本难以初始化。

3 个答案:

答案 0 :(得分:0)

参考 mysql_secure_installation (我的安装上的/ usr / bin),它在DB和临时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

答案 1 :(得分:0)

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

答案 2 :(得分: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 |
+------+-------------------+

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