1

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 からの読み取りのようなファンキーなことをしていると考え始めています。これにより、起動スクリプトで初期化するのが難しくなります。

4

3 に答える 3

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
于 2012-04-07T23:58:27.810 に答える
0

これは可能ではないようです。mysql と mysqladmin は完全にスクリプト可能ではありません。

于 2012-04-09T00:11:24.113 に答える
0

Ok。Macでmysqlをセットアップし、この質問の所有者のようにmysqladminコマンドを使用して初めてmysqlルートパスワードを設定する手順に従っていました。基本的に、状況はここで説明したとおりです。

そのため、実際には 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 に答える