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

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

我将 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="" 

相关内容