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

标签 mysql amazon-ec2 startupscript mysqladmin

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

# mysqladmin -u root password mygreatnewpassword

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

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'

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

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

我很困惑。

在有人评论说这是不安全的之前,事实并非如此。密码存储在作为启动的一部分安装的私有(private) EBS 卷上,并从该卷上的文件中提取并放入启动 shell 的环境中,然后在脚本中使用(而不是回显到系统日志中)。然后卸载 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 命令)没有错误。

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

最佳答案

引用 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

关于mysqladmin 设置初始 root 密码在脚本中失败但在 shell 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10059313/

相关文章:

node.js - Socket.io 在部署后无法工作 - 抛出错误 - 405(不允许)

amazon-web-services - 为 EC2 实例保留相同的 IP 地址

ubuntu - 启动脚本不是 root (google cloud compute, ubuntu 14.04 VM)

linux - 在 GRUB 和 menu.lst 的帮助下运行脚本?

mysql - 检查 select 语句是否返回带有 IF 的内容

javascript - 使用 ajax 和 php 的空响应

PHP 多个下拉框表单提交到 MySQL(第 2 部分)

sql - MySQL 数据库审计跟踪触发器

hadoop - 停止/重启后 AWS 实例私有(private) IP 发生变化(之前没有发生)

windows - Octave-如何在启动时自动执行命令