Übergeben Sie die Ausgabe des Metadatenaufrufs an MySQL

Übergeben Sie die Ausgabe des Metadatenaufrufs an MySQL

Referenz:So übergeben Sie ein Passwort an die MySQL-Befehlszeile

Ich möchte zurückgegebene Metadaten von einer AWS EC2-Instanz abrufen und basierend auf diesen Daten ein neues MySQL-Passwort festlegen.

Ich brauche Unterstützung mit dem Skript, das beim ersten Start ausgeführt wird.

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

mysql -u root -pOldPassword  
UPDATE mysql.user  

Übergeben Sie nun die Instanz-ID und verwenden Sie sie, um ein neues Kennwort für das MySQL-Root festzulegen.

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

FLUSH PRIVILEGES;

EXIT

Antwort1

Bash erweitert Variablen nicht in einfachen Anführungszeichen. Abgesehen davon können Sie mehrere SQL-Abfragen ausführen oder, wenn Sie es vorziehen, eine einzelne, indem Sie den<<EOF...EOFKonstruktion. Der folgende Code hat bei mir funktioniert

#!/bin/bash                                                                                                                                 

newpass="newPassword"

mysql -u root -poldPassword <<EOF                                                                                                                  
UPDATE mysql.user SET Password=PASSWORD("$newpass") WHERE User='root';                                                                      
FLUSH PRIVILEGES;                                                                                                                           
QUIT                                                                                                                                        
EOF

Sie können den richtigen UPDATEBefehl entsprechend Ihrer MySQL-Version ausführen. Ich habe verwendet5.6.35. Falls Sie MySQL verwenden5.7Verwenden Sie lediglich die folgende UPDATEAbfrage anstelle der oben gezeigten:

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

Weitere Informationen finden Sie in den offiziellen MySQL-Dokumenten: https://dev.mysql.com/doc/refman/5.7/en/update.html

verwandte Informationen