如何在通过 shell 脚本执行“mysqldump”时提供密码

如何在通过 shell 脚本执行“mysqldump”时提供密码

我编写了一个批处理文件,用于建立与 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/

相关内容