Ссылка:Как передать пароль в командную строку mysql
Я хочу получить возвращенные метаданные из экземпляра AWS EC2 и установить новый пароль MySQL на основе этих данных.
Мне нужна помощь со скриптом, который будет запускаться при первой загрузке.
#!/bin/bash
output=$(ec2metadata --instance-id); Used for storing EC2 ID.
mysql -u root -pOldPassword
UPDATE mysql.user
Теперь передайте идентификатор экземпляра и используйте его для установки нового пароля для пользователя root в 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
Вы можете запустить правильную UPDATE
команду в соответствии с вашей версией MySQL. Я использовал5.6.35. Если вы используете MySQL5.7UPDATE
только вместо показанного выше запроса используйте следующий :
UPDATE mysql.user SET authentication_string=PASSWORD("$newpass") WHERE User='root';
Более подробную информацию вы можете найти в официальной документации MySQL: https://dev.mysql.com/doc/refman/5.7/en/update.html