我有一个shell脚本,它使用外部文件中的一个参数调用mysql命令,它看起来像这样(我也在其他资源中看到过这个例子):
mysql --user=root --password=`cat /root/.mysql`
它不起作用:
无法连接到MySQL服务器:用户'root'@'localhost'拒绝访问(使用密码:YES)。
我尝试了不同的引号而没有成功。如何通过?
更新1: 发现我可以通过没有空格符号的密码。在这个问题中,我的根传递包含空格。
答案 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