AWS EC2 インスタンスから返されたメタデータを取得し、このデータに基づいて新しい MySQL パスワードを設定したいと考えています。
最初の起動時に実行されるスクリプトに関する支援が必要です。
#!/bin/bash
output=$(ec2metadata --instance-id); Used for storing EC2 ID.
mysql -u root -pOldPassword
UPDATE mysql.user
次に、instance-id を渡し、それを使用して mysql root の新しいパスワードを設定します。
SET authentication_string = PASSWORD('$output'), password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
EXIT
答え1
Bashはシングルクォート内の変数を展開しません。それとは別に、複数のSQLクエリを実行することも、必要に応じて1つのSQLクエリを実行することもできます。<<EOF...EOF
構築。以下のコードは私の場合はうまくいきました
#!/bin/bash
newpass="newPassword"
mysql -u root -poldPassword <<EOF
UPDATE mysql.user SET Password=PASSWORD("$newpass") WHERE User='root';
FLUSH PRIVILEGES;
QUIT
EOF
UPDATE
MySQLのバージョンに応じて適切なコマンドを実行してください。私は5.6.35MySQLを実行している場合5.7UPDATE
ただし、上記のクエリの代わりに次のクエリを使用します。
UPDATE mysql.user SET authentication_string=PASSWORD("$newpass") WHERE User='root';
詳細については、MySQL の公式ドキュメントをご覧ください。 https://dev.mysql.com/doc/refman/5.7/en/update.html