如何将登录参数传递给mysql

时间:2013-06-12 16:29:14

标签: mysql shell unix

我有一个调用mysql命令行客户端的shell脚本,它看起来像这样:

 $ cat ms
 mysql --host=titanic --user=fred --password="foobar"

一切正常:

$ ./ms 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 810
...

现在,我想将脚本保存在git存储库中,但没有用户和密码的详细信息。所以,我以为我会有一个文件SECRET--host=titanic --user=fred --password="foobar"我不会添加到git存储库,并像这样更改ms脚本:

mysql $(cat SECRET)

不幸的是,它不起作用。运行时我收到此错误:

$ ./ms
ERROR 1045 (28000): Access denied for user 'fred'@'example.com' (using password: YES)

我无法理解 - 当评估/扩展$(cat SECRET)时,它看起来与mysql的直接调用完全相同。不过,它不起作用。如果我尝试直接在交互式shell中执行此操作,也会发生同样的情况:

$ mysql --host=titanic --user=fred --password="foobar"

工作正常,但下面没有:

$ cat SECRET
--host=titanic --user=fred --password="foobar"
$ mysql $(cat SECRET)
ERROR 1045 (28000): Access denied for user 'fred'@'example.com' (using password: YES)
$ echo mysql $(cat SECRET)
mysql --host=titanic --user=fred --password="foobar"

任何人都可以了解这里发生的事情以及如何解决这个问题?非常感谢提前。

1 个答案:

答案 0 :(得分:7)

将文件更改为:

--host=titanic --user=fred --password=foobar

命令或变量替换的结果不会处理引号,只会进行单词拆分和文件名扩展。

但更好的解决方案可能是使用option file,例如mysecret.cnf:

[mysql]
user=fred
password=foobar
host=titanic

然后运行mysql:

mysql --defaults-file=mysecret.cnf