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

时间:2016-01-21 05:31:31

标签: mysql shell unix

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

mysql --user=root --password=`cat /root/.mysql`

它不起作用:

  

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

我尝试了不同的引号而没有成功。如何通过?

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

6 个答案:

答案 0 :(得分:9)

最后这一行工作:

pop()

或:

 mysql --user=root --password="$(cat /root/.mysql)"

root密码必须没有引号:mysql --user=root --password="$(< /root/.mysql)"

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

bla bla bla

答案 1 :(得分:7)

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

install -m 700 -d /srv/secrets/
install -m 600 /dev/null /srv/secrets/root@localhost.cnf
editor /srv/secrets/root@localhost.cnf

将密码存储在client.password ini property

[client]
password="password"

在mysql命令中将此文件包含为first argument

mysql \
    --defaults-extra-file=/srv/secrets/root@localhost.cnf \
    --user=root \
    --host=localhost \
    --no-auto-rehash

答案 2 :(得分:1)

使用mysql客户端随附的mysql_config_editor

mysql_config_editor设置--login-path = dev --user = dbuser --host = localhost -p

输入密码,然后您可以使用此密码登录

mysql --login-path = dev

答案 3 :(得分:1)

为此,您应该使用mysql_config_editor

$ mysql_config_editor set \
    --login-path=name_of_connection \
    --host=server.example.com \
    --user=login_as_user \
    --password

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

mysql --login-path=name_of_connection dbname将以dbname的身份连接到server.example.com上的login_as_user

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

答案 4 :(得分:0)

尝试:

if [ $MYSQL_PASS ]
then
  mysql -u "$MYSQL_ROOT" -p "$MYSQL_PASS" -e "SHOW DATABASES"
else
  mysql -u "$MYSQL_ROOT" -e "SHOW DATABASES"
fi

答案 5 :(得分:-1)

我不确定这是否可行,但您肯定可以使用配置 file