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...EOF
Konstruktion. 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 UPDATE
Befehl entsprechend Ihrer MySQL-Version ausführen. Ich habe verwendet5.6.35. Falls Sie MySQL verwenden5.7Verwenden Sie lediglich die folgende UPDATE
Abfrage 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