使用heredoc时,MySQL会提示输入密码

时间:2014-12-23 04:29:03

标签: mysql heredoc

我正在尝试执行shell脚本以root身份登录mysql并执行一些命令,为了避免将root用户的密码放在命令行中,我使用的是heredoc格式,如下所示。 但是,尽管我给它提供了正确的密码,但mysql会提示我输入密码。

完全相同的语法在其他一些主机上运行完美但不在此处。

为什么?

mysql@myhost:MySQL> mysql -uroot -p -s -P3306 -e 'SELECT NOW();'  <<EOF
> MyPassword
> EOF
Enter password:    <---- why does it require manual password entry in here?
2014-12-23 14:57:25

1 个答案:

答案 0 :(得分:0)

假设您使用BASH或KSH命令行界面:

read -s pwd;mysql -uroot --password=${pwd} -s -P3306 -e 'SELECT NOW();'

对于read命令,你应该使用-s选项,因为正如使用heredoc一样,如果你不使用这个选项,这个解决方案也会显示输入的密码。

此解决方案有效,因为 mysql 客户端会对密码进行模糊处理,因此它不会显示在进程列表命令的输出中,例如 ps < / EM> 即可。运行这个:

read -s pwd;mysql -uroot --password=${pwd} -s -P3306

然后,如果您打开一个额外的命令行界面并执行 ps ,您将看到它没有显示密码,但是它的模糊版本,进程列表。

这是当天的 mysql 客户端的一个着名错误,但在2002年修复了。

使用 read -s 将密码放入变量中,可以在命令行界面的 历史记录中不显示密码