我将 MySQL 密码保存在一个文件中foo.php
,例如P455w0rd
,当我尝试使用它时:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
这两个选项仍然要求输入密码,发送密码的正确方法是什么stdin
?
答案1
客户端实用程序可以使用或选项mysql
在命令行上获取密码。-p
--password=
如果使用-p
,选项字母后面不能有任何空格:
$ mysql -pmypassword
我更喜欢脚本中的长选项,因为它们是自我记录的:
mysql --password=mypassword --user=me --host=etc
答案2
您必须非常小心如何将密码传递到命令行,因为如果您不小心,您最终会使用诸如ps
.
最安全的方法是创建一个新的配置文件并mysql
使用--defaults-file=
或--defaults-extra-file=
命令行选项将其传递。
两者之间的区别在于,除了默认配置文件之外,还会读取后者,而对于前者,仅使用作为参数传递的一个文件。
您的附加配置文件应包含类似于以下内容的内容:
[client]
user=foo
password=P@55w0rd
确保您保护该文件的安全。
然后运行:
mysql --defaults-extra-file=<path to the new config file> [all my other options]
答案3
创建一个文件~/.my.cnf,设置为只能自己访问,权限600。
[client]
user=myuser
password=mypassword
然后你就不需要再输入密码了。
bash$ mysql -u myuser mydatabase
mysql>
答案4
正如@maxschlepzig 在评论中所说,
请注意,如果不指定 -p,mysql 会读取 MYSQL_PWD 环境变量。
所以在bash中:
read -s -p "Enter the mysql password for $DBUSER @ $DBNAME: " DBPASS
export MYSQL_PWD="$DBPASS"
mysqldump -u $DBUSER $DBNAME > dump.sql
# once you are done
export MYSQL_PWD=""