EC2 インスタンスで (ルートとして実行される) 起動スクリプトの一部としてこれを実行しようとしています。
# mysqladmin -u root password mygreatnewpassword
これをデバッグするために、コマンド全体をログにエコーしましたが、正しいです。スクリプトのコマンドの前に「ps ax」を実行して、mysql が実行されていることを確認しました。パスワードを二重引用符と一重引用符で囲んで試してみました(問題ではなかったはずで、問題ではありませんでした)。何を試しても、スクリプトでエラーが発生します
mysqladmin: 'localhost' でサーバーに接続できませんでした
。エラー: 'Access denied for user 'root'@'localhost' (using password: NO)'
しかし、シェルでスクリプトからまったく同じ行をコピーして実行すると、機能します。また、コマンドを実行する前に root パスワードがないことを確認しました (いずれの場合も)。
-p を使用する必要があるとは限りません。シェルから実行する場合は必要ないため、エラーはそのように見えますが。
私は困惑しています。
そして、これが安全でないと誰かがコメントする前に、そうではありません。パスワードは、スタートアップの一部としてマウントされたプライベート EBS ボリュームに保存され、そのボリューム上のファイルから取り出されてスタートアップ シェルの環境に置かれ、スクリプトで使用されます (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
シェルから接続すると、エラーなしで問題なく接続されます(そして、UPDATEおよびFLUSHコマンドを入力できます)。
私は、mysql と mysqladmin が、シェル スクリプト内から実行すると失敗する原因となる tty からの読み取りのようなファンキーなことをしていると考え始めています。これにより、起動スクリプトで初期化するのが難しくなります。