將元資料呼叫的輸出傳遞給 MySQL

將元資料呼叫的輸出傳遞給 MySQL

參考:如何將密碼傳遞給mysql命令列

我想從 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 查詢,或者如果您願意,可以使用下列命令執行單一 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.35。如果您正在執行 MySQL5.7僅使用以下UPDATE查詢而不是上面顯示的查詢:

UPDATE mysql.user SET authentication_string=PASSWORD("$newpass") WHERE User='root';

您可以在 MySQL 官方文件中找到更多資訊: https://dev.mysql.com/doc/refman/5.7/en/update.html

相關內容