如何将密码从文件传递给mysql命令?

Sog*_*ogl 6 mysql unix shell

我有一个shell脚本,它使用外部文件中的一个参数调用mysql命令,它看起来像这样(我也在其他资源中看到了这个例子):

mysql --user=root --password=`cat /root/.mysql`
Run Code Online (Sandbox Code Playgroud)

它不起作用:

无法连接到MySQL服务器:用户'root'@'localhost'拒绝访问(使用密码:YES).

我尝试了不同的引号而没有成功.怎么通过呢?

更新1:发现我可以在没有空格符号的情况下传递密码.在这个问题中,我的根传递包含空格.

Tho*_*ner 12

将密码存储在受保护的mysql cnf文件中:

install -m 700 -d /srv/secrets/
install -m 600 /dev/null /srv/secrets/root@localhost.cnf
editor /srv/secrets/root@localhost.cnf
Run Code Online (Sandbox Code Playgroud)

将密码存储在client.password ini属性中

[client]
password="password"
Run Code Online (Sandbox Code Playgroud)

将此文件包含在mysql命令的第一个参数中:

mysql \
    --defaults-extra-file=/srv/secrets/root@localhost.cnf \
    --user=root \
    --host=localhost \
    --no-auto-rehash
Run Code Online (Sandbox Code Playgroud)


小智 10

使用mysql_config_editor安装了与MySQL客户端

mysql_config_editor set --login-path=dev --user=dbuser --host=localhost -p
Run Code Online (Sandbox Code Playgroud)

输入密码然后就可以这样登录了

mysql --login-path=dev
Run Code Online (Sandbox Code Playgroud)


Sog*_*ogl 6

最后这行工作:

 mysql --user=root --password="$(cat /root/.mysql)"
Run Code Online (Sandbox Code Playgroud)

要么:

mysql --user=root --password="$(< /root/.mysql)"
Run Code Online (Sandbox Code Playgroud)

root密码必须没有引号: bla bla bla

如果您的密码不包含空格,您可以使用:

mysql --user=root --password=`cat /root/.mysql`
Run Code Online (Sandbox Code Playgroud)

  • 这不会阻止密码在进程cmd行参数中公开... -_- (6认同)

Mog*_*rDK 5

您应该mysql_config_editor为此使用。

$ mysql_config_editor set \
    --login-path=name_of_connection \
    --host=server.example.com \
    --user=login_as_user \
    --password
Run Code Online (Sandbox Code Playgroud)

这将提示输入密码,并保存到您的 homedir 中的 .mylogin.cnf 文件中。

mysql --login-path=name_of_connection dbname将连接到dbnameserver.example.com作为login_as_user

如果--login-path与其他选项一起使用,例如。--silent,--login-path 必须是第一个参数/选项