首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在java中使用CreateProcess error=5备份mysql数据库时,会拒绝访问。

在java中使用CreateProcess error=5备份mysql数据库时,会拒绝访问。
EN

Stack Overflow用户
提问于 2014-11-20 12:24:39
回答 1查看 2.3K关注 0票数 1

我正在尝试使用中的ProcessBuilder备份ProcessBuilder DB,但是,我得到了这个错误

代码语言:javascript
运行
复制
"!Cannot run program "C:\Program Files\MySQL\MySQL Server 5.5\bin": CreateProcess error=5, Access is denied".

这是我的密码。

代码语言:javascript
运行
复制
public static String backupDb() {
    String resp=null;
    try {
        System.out.println("Started........");
        ProcessBuilder builder = new ProcessBuilder("C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin", "mysqldump -u root -pmypass mydb> c:\\backup\\mybackup.sql");
        builder.redirectErrorStream(true);
        Process p = builder.start();
    } catch(Exception e) {
        resp="!"+e.getMessage();
    }
    return resp;
}

我哪里会出错?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 13:35:33

要做到这一点,你必须做几件事:

  1. 打开终端/控制台以运行mysql转储命令,否则重定向操作符(>)将无法工作。
  2. 检查文件路径中所需的文件夹是否存在。例如,如果要在C:\\foo\bar\foobar\backup.sql中备份数据库,但不存在C:\\fooC:\\foo\\barC:\\foo\\bar\\foobar文件夹之一,则会出现错误
  3. 调整mysqldump的路径,以便将包含空格的文件夹名包装在" "中,否则会出现尴尬的错误,如:'C:\Program' is not recognized as an internal or external command
  4. 如果出现错误,请读取错误流,否则您的进程将挂起。返回值为0表示成功。

这是一个测试版本,包括上述所有内容。我把filepath作为参数传递,因为这样更灵活。

代码语言:javascript
运行
复制
public static void backupDb(final String mysqlDumpFilePath)
    throws IOException, InterruptedException {

    String folderPath = mysqlDumpFilePath.substring(0, mysqlDumpFilePath.lastIndexOf("\\"));
    File folder = new File(folderPath);
    if (!folder.exists()) {
        folder.mkdirs(); // 2
    }
    File f = new File(mysqlDumpFilePath);
    ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "C:\\\"Program Files\"\\MySQL\\\"MySQL Server 5.5\"\\bin\\mysqldump -u root -pmypass mydb > "
        + f.getAbsolutePath()); //1 & 3

    Process exec = builder.start();
    int retCode = exec.waitFor();
    if (retCode != 0) { //4
        // something went wrong
        InputStream errorStream = exec.getErrorStream();
        byte[] buffer = new byte[errorStream.available()];
        errorStream.read(buffer);

        System.out.println(new String(buffer));
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27039588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档