mysqldump提示在shellscript中输入密码


9

我写了一个简单的shell脚本来转储特定的mysql数据库。问题是即使我提供了密码,它也会提示我输入密码。如果这很重要,则mysql db是5.0.27版。这是我正在使用的特定行。

$MYSQLDUMP -u backup -p$MyPass $DB > $DEST/$FILE

我尝试了几种变体,但无济于事。

Answers:


4

我敢打赌,$MyPass您的脚本中的设置不正确。如果任何mysql命令行工具收到-p的密码都没有立即跟在密码后,则它们会认为应该提示输入密码。另一方面,如果您提供了错误的密码(或错误的用户名或类似密码),它将只会导致连接失败。

因此,我建议echo在该行的开头放置一个命令,然后重新运行脚本,如下所示:

echo $MYSQLDUMP -u backup -p$MyPass $DB

不要忘记删除输出重定向。


1
doh,这是愚蠢的变量,在上一行中将其设置为小写时已传递了大写字母。谢谢大家
aduljr

18

更好的解决方案是将用户名和密码存储在配置文件中,然后指向该配置文件。通过在命令行中输入密码,任何可以运行ps的人都可以找到您服务器的密码。

传递--defaults-extra-file=/pathto/database.cnf给mysql dump。

配置文件应如下所示。设置文件系统权限,以便只有备份过程才能打开配置文件。

[client]
host     = servername.domain.tld
user     = backup
password = strongpassword

更新(2016-06-29)如果运行的是mysql 5.6.6或更高版本,则应查看mysql_config_editor工具,该工具可将凭据存储在加密文件中。感谢乔瓦尼向我提及这一点。


它是该数据库的特定用户,只有足够的权限才能执行备份。只有两个人(我和另一个人)可以访问此服务器。但是,我将利用该cnf文件的想法。从来不知道那种选择。谢谢
aduljr

3
我知道这是一个旧答案,但是在搜索如何安全地传递密码时仍会显示该密码,并且它也与其他帖子相关联。使用5.5版时,我不得不将StrongPassword封装在配置文件中的单个刻度中,例如,如果密码为aoeu1234,则配置文件为password = 'aoeu1234'; 否则,您将得到未经授权的错误。
戴蒙2014年

想知道是否有解决方案在.cnf文件中不包含明文密码。
鲍勃·斯坦

@Zoredache, 如何 “人谁可以运行PS可以找到适合您的服务器的密码”?
Pacerier,2015年

@Damon,如果您的密码有这些勾号怎么办?
和平者
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.