Referência:Como passar senha para linha de comando do mysql
Quero pegar os metadados retornados de uma instância do AWS EC2 e definir uma nova senha mysql com base nesses dados.
Preciso de ajuda com o script que será executado na primeira inicialização.
#!/bin/bash
output=$(ec2metadata --instance-id); Used for storing EC2 ID.
mysql -u root -pOldPassword
UPDATE mysql.user
Agora passe o instance-id e use-o para definir uma nova senha para o root do mysql.
SET authentication_string = PASSWORD('$output'), password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
EXIT
Responder1
Bash não expande variáveis entre aspas simples. Além disso, você pode executar várias consultas SQL, ou uma única, se preferir, usando o comando<<EOF...EOF
construção. O código abaixo funcionou para mim
#!/bin/bash
newpass="newPassword"
mysql -u root -poldPassword <<EOF
UPDATE mysql.user SET Password=PASSWORD("$newpass") WHERE User='root';
FLUSH PRIVILEGES;
QUIT
EOF
Você pode executar o UPDATE
comando corretamente de acordo com sua versão do MySQL. eu estava usando5.6.35. Caso você esteja executando o MySQL5.7apenas, use a seguinte UPDATE
consulta em vez da mostrada acima:
UPDATE mysql.user SET authentication_string=PASSWORD("$newpass") WHERE User='root';
Você pode encontrar mais informações nos documentos oficiais do MySQL: https://dev.mysql.com/doc/refman/5.7/en/update.html