mysqladmin设置初始根密码在脚本中失败,但在shell中有效

mysqladmin设置初始根密码在脚本中失败,但在shell中有效,mysql,amazon-ec2,startupscript,mysqladmin,Mysql,Amazon Ec2,Startupscript,Mysqladmin,我试图在EC2实例上作为启动脚本(以root用户身份运行)的一部分来执行此操作 # mysqladmin -u root password mygreatnewpassword 为了调试它,我将整个命令回显到日志中,它是正确的。我在脚本中的命令之前执行了一个“ps ax”,以确保mysql正在运行。我在密码周围用双引号和单引号试过(不应该也不应该)。无论我尝试什么,在脚本中都会出错 mysqladmin:连接到“localhost”上的服务器失败 错误:“拒绝用户‘root’@‘localho

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

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

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

但是,当我在shell中复制并运行脚本中完全相同的行时,它就工作了。在命令运行之前,我已经验证了没有根密码(无论是哪种情况)

我不可能需要使用-p,即使错误看起来是这样的,因为我从shell运行它时不需要它

我很困惑

在任何人评论这是不安全的之前,它不是。密码存储在一个私有EBS卷上,该卷作为启动的一部分装载,并从该卷上的文件中取出,放入启动shell的环境中,然后在脚本中使用(而不是回显到syslog中)。然后卸载EBS卷。一旦启动脚本结束,密码就只在mysql中了


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

通过shell,我可以正常连接(并且我可以输入更新和刷新cmds),没有错误


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

指的是mysql\u安全\u安装(/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
!/bin/ksh
config=“.my.cnf.$$”
command=“.mysql.$$”
do_query(){
echo$1>$command
mysql——默认文件=$config$config
echo“[mysql]”>>$config
echo“user=root”>>$config
echo“password=$rootpass”>>$config
}
rootpass=“mynewpassword”
do_query“UPDATE mysql.user SET Password=Password('$rootpass'),其中user='root';”
不查询“刷新权限”
rm-f$config$命令

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

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

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

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

因此,我觉得有必要重新回答这个问题。

我在问新安装后如何设置初始根密码(当没有根密码时)从我的安装脚本。你发布的只是一个ping命令,使用root/secretpassword进行身份验证。很抱歉,从最初的问题中我不理解这一点;我添加了一个从mysql提供的文件中提取的摘录,应该有助于修复此问题。感谢帮助,仍然不起作用。我甚至简化了它。它从命令行运行,但仍然有效在脚本中失败。我放弃了,并且假设我做不到()它必须是可编写脚本的,因为mysql\u secure\u安装会执行此操作。在我看来,您看到的错误消息看起来像是mysql命令无法连接,因为没有传入密码。当您运行此脚本时,密码是否已设置?不,在脚本失败后,我仍然可以键入“mysql”并连接并发出提示。很抱歉,如果我不清楚,没有根密码,这是在脚本安装mysql之后。我正在尝试使用mysqladmin设置初始根密码。上述命令的格式对于在不存在根密码时设置根密码是正确的,并且,该命令在键入shell时有效,但在从启动脚本运行时无效。
#!/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
+------+-------------------+
| User | Host              |
+------+-------------------+
| root | 127.0.0.1         |
| root | ::1               |
|      | localhost         |
| root | localhost         |
|      | macbook-pro.local |
| root | macbook-pro.local |
+------+-------------------+