메타데이터 호출의 출력을 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 쿼리를 실행하거나 원하는 경우 단일 쿼리를 실행할 수 있습니다.<<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

관련 정보