![如何在通过 shell 脚本执行“mysqldump”时提供密码](https://linux22.com/image/1005774/%E5%A6%82%E4%BD%95%E5%9C%A8%E9%80%9A%E8%BF%87%20shell%20%E8%84%9A%E6%9C%AC%E6%89%A7%E8%A1%8C%E2%80%9Cmysqldump%E2%80%9D%E6%97%B6%E6%8F%90%E4%BE%9B%E5%AF%86%E7%A0%81.png)
我编写了一个批处理文件,用于建立与 Linux 服务器的连接,我可以这样做,之后我尝试将 mysqldump 带到某个目录,它具有所有 777 个权限,但 Linux 系统要求我“输入密码”,但密码为空,我需要手动按下Enter,我只需执行我的脚本,只需按下,Enter即可自动执行。以下是一些详细信息。
批处理文件:
plink.exe -ssh user@host -m command.txt
command.txt
:
mysqldump -uve -p -R -E --single-transaction --databases mydb|gzip > /home/user/mydb_bkup.gz
这是提示我输入密码的图像:
请给我提供一些输入,以便我可以输入密码并自动执行我的命令。
答案1
据我了解,这是命令您正在运行要求输入密码的程序。您的命令行是:
mysqldump -uve -p -R -E --single-transaction --databases mydb|gzip > /home/user/mydb_bkup.gz
如果我们转到man mysql
,我们会看到以下内容:
连接服务器时使用的密码。如果使用短选项形式 (-p),则选项和密码之间不能有空格。如果在命令行中省略 --password 或 -p 选项后的密码值,mysql 会提示输入密码。
您没有指定任何内容 - 因为 shell 威胁使用空格作为参数分隔符。请为 mysql 用户设置密码,-p
从 command.txt 文件中删除,或者...将您的命令修改为以下内容:
mysqldump -uve --password="" -R -E --single-transaction --databases mydb|gzip > /home/user/mydb_bkup.gz
这里我们明确指定一个空白密码。
答案2
在命令行或环境变量中提供密码应被视为有风险。在 mysqldump 运行时,诸如 ps 之类的工具将公开命令行参数,诸如 procfs 之类的文件系统将公开环境变量。这不会因用于备份的只读帐户而改变,因为它们仍可能泄露值得保护的信息。
使用包含用户名和密码的额外默认文件被认为是更好的方法。
https://www.serverlab.ca/tutorials/linux/database-servers/how-to-create-a-credential-file-for-mysql/