我编写了一个简单的 shell 脚本来转储特定的 mysql 数据库。问题是,即使我提供了密码,它也会提示我输入密码。如果这很重要,mysql db 是版本 5.0.27。这是我正在使用的特定行。
$MYSQLDUMP -u backup -p$MyPass $DB > $DEST/$FILE
我尝试了几种变化,但都无济于事。
答案1
我敢打赌,$MyPass
您的脚本中没有正确设置。如果任何 mysql 命令行工具收到一个后面-p
没有紧跟密码的命令,它们会认为应该提示输入密码。另一方面,如果您提供了错误的密码(或错误的用户名或类似信息),它将无法连接。
因此,我建议echo
在该行的开头放置一个命令并重新运行脚本,如下所示:
echo $MYSQLDUMP -u backup -p$MyPass $DB
不要忘记删除输出重定向。
答案2
更好的解决方案是将用户名和密码存储在配置文件中并指向该文件。通过将其放在命令行中,任何可以运行 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允许您的工具存储凭证在加密文件中。感谢乔瓦尼向我提及此事。