メタデータ呼び出しの出力をMySQLに渡します。

メタデータ呼び出しの出力をMySQLに渡します。

引用:mysqlコマンドラインにパスワードを渡す方法

AWS EC2インスタンスから返されたメタデータを取得し、このデータに基づいて新しいmysqlパスワードを設定したいと思います。

初めて起動するときに実行されるスクリプトの助けが必要です。

#!/bin/bash  
output=$(ec2metadata --instance-id); Used for storing EC2 ID.   

mysql -u root -pOldPassword  
UPDATE mysql.user  

次に、インスタンスIDを渡し、それを使用してmysqlルートの新しいパスワードを設定します。

SET authentication_string = PASSWORD('$output'), password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';

FLUSH PRIVILEGES;

EXIT

答え1

Bashは一重引用符で囲まれた変数を拡張しません。これに加えて、複数のSQLクエリを実行できます。必要に応じて、次のコマンドを使用して単一の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

UPDATEMySQLのバージョンに応じて正しいコマンドを実行できます。使っています5.6.35。 MySQLを実行している場合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

関連情報