将元数据调用的输出传递给 MySQL

将元数据调用的输出传递给 MySQL

参考:如何将密码传递给mysql命令行

我想从 AWS EC2 实例获取返回的元数据,并根据此数据设置新的 mysql 密码。

我需要有关将在首次启动时运行的脚本的帮助。

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

mysql -u root -pOldPassword  
UPDATE mysql.user  

现在传递instance-id并使用它为mysql root设置新密码。

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

FLUSH PRIVILEGES;

EXIT

答案1

Bash 不扩展单引号中的变量。除此之外,您还可以运行多个 SQL 查询,或者如果您愿意,可以使用以下命令运行单个 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.7仅使用以下UPDATE查询而不是上面显示的查询:

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

您可以在 MySQL 官方文档中找到更多信息: https://dev.mysql.com/doc/refman/5.7/en/update.html

相关内容