Referencia:Cómo pasar la contraseña a la línea de comando de MySQL
Quiero obtener los metadatos devueltos de una instancia AWS EC2 y establecer una nueva contraseña de MySQL basada en estos datos.
Necesito ayuda con el script que se ejecutará en el primer inicio.
#!/bin/bash
output=$(ec2metadata --instance-id); Used for storing EC2 ID.
mysql -u root -pOldPassword
UPDATE mysql.user
Ahora pase el ID de instancia y úselo para establecer una nueva contraseña para la raíz de MySQL.
SET authentication_string = PASSWORD('$output'), password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
EXIT
Respuesta1
Bash no expande las variables entre comillas simples. Aparte de eso, puede ejecutar varias consultas SQL, o una sola si lo prefiere, utilizando el<<EOF...EOF
construcción. El siguiente código funcionó para mí
#!/bin/bash
newpass="newPassword"
mysql -u root -poldPassword <<EOF
UPDATE mysql.user SET Password=PASSWORD("$newpass") WHERE User='root';
FLUSH PRIVILEGES;
QUIT
EOF
Puede ejecutar el UPDATE
comando correctamente según su versión de MySQL. yo estaba usando5.6.35. En caso de que esté ejecutando MySQL5.7únicamente, utilice la siguiente UPDATE
consulta en lugar de la que se muestra arriba:
UPDATE mysql.user SET authentication_string=PASSWORD("$newpass") WHERE User='root';
Puede encontrar más información en los documentos oficiales de MySQL: https://dev.mysql.com/doc/refman/5.7/en/update.html