gpt4 book ai didi

java - 在 Linux 中进行 Mysql 数据库备份显示 java.io.IOException :

转载 作者:行者123 更新时间:2023-11-29 23:00:18 26 4
gpt4 key购买 nike

同时使用以下代码进行Mysql数据库备份

String shellCommand = "mysqldump --user" + dbUser + " --password="
+ dbPass + " --databases" + dbName
+" |gzip - 9 > backup.sql.gz";
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(new String[]{"/bin/bash", "-c",shellCommand});
int exitValue = process.waitFor();

我收到以下异常

java.io.IOException: Cannot run program 
"/bin/bash": CreateProcess error=2, The system cannot find the file specified

最佳答案

在 OS X 上,你的代码没有抛出异常,也没有做任何事情。检查 Process.getErrorStream() 的内容后,该命令似乎找不到 mysqldump。将完整路径传递给 mysqldump(例如 locate mysqldump 的输出)有效(代码中的 mysqldump 语法也存在一些错误)。下面是有效的代码(至少在 OS X 上):

String shellCommand = "/usr/local/bin/mysqldump --user=" + dbUser + " --password="
+ dbPass + " --databases " + dbName
+" |gzip -9 > backup.sql.gz";
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(new String[] {"/bin/bash", "-c",shellCommand});
int exitValue = process.waitFor();

请注意,此代码可能容易受到危险的命令注入(inject)安全漏洞的影响。如果参数(用户名、密码和数据库名称)受到应用程序用户的控制,恶意用户可能会操纵参数以在操作系统上执行命令(例如通过将 dbname | rm -rf/| 传递为数据库名称)。您必须确保这些参数不受应用程序用户的控制或采取其他措施来防止漏洞(操作系统命令转义或执行mysqldump,然后作为单独的进程直接gzip到Runtime.exec并连接第一个进程的输入流以输出应用程序中第二个流的流)。

关于java - 在 Linux 中进行 Mysql 数据库备份显示 java.io.IOException :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com