【问题标题】:mysql database backup using mysqldump使用 mysqldump 备份 mysql 数据库
【发布时间】:2014-09-21 19:40:52
【问题描述】:

我正在尝试使用以下代码备份 mysql 数据库。

    public boolean backupDB() {

    String executeCmd = "mysqldump -u root -p 1234 --add-drop-database -B test -r D:\\backup\\aaa.sql";
    Process runtimeProcess;
    try {
        runtimeProcess = Runtime.getRuntime().exec(executeCmd);
        int processComplete = runtimeProcess.waitFor();
        if (processComplete == 0) {
            System.out.println("Backup created successfully");
            return true;
        } else {
            System.out.println("Could not create the backup");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return false;
}

但它总是给我这个错误:

CreateProcess error=2, The system cannot find the file specified

我该如何解决这个问题? 谢谢

【问题讨论】:

    标签: java mysql mysqldump runtime.exec database-backups


    【解决方案1】:

    修改PATH 外部变量以包含mysqldump.exe 的路径或使用文件的绝对路径。

    set PATH=%PATH%;%MYSQL_HOME%\bin 
    

    其中MYSQL_HOME 是一个包含 MySQL 服务器安装文件夹路径的变量。

    与绝对路径一起使用时。请注意,此路径取决于您的 comp,不应在生产代码中使用。

    String executeCmd = "C:\\Programs Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump.exe -u root -p 1234 --add-drop-database -B test -r D:\\backup\\aaa.sql";
    

    【讨论】:

    • 我应该从某个地方下载mysqldump.exe吗?
    • 如何使用文件的绝对路径?
    • 我试过 set PATH=%PATH%;%MYSQL_HOME%\bin 但它不起作用
    • 为了以编程方式获取它,我会加载程序文件和程序文件(x86),扫描这两个文件夹以查找名为“MySQL”(或类似名称)的文件夹,然后在该文件夹中,搜索包含“MySQL Server”的文件夹(正则表达式:“/MySQL Server \d+\.\d+”),在“MySQL Server ...”文件夹中找到“bin”,然后检查 bin 是否包含“mysqldump.exe ”。这种方法有点暴力,可能有更简单/更有效的方法,但这只是一个想法。
    • 我不知道您是否需要阅读安装指南,您可以在mysql 网站上找到它。最好设置一个 HOME 环境变量并更新 PATH,这样您就可以从任何地方运行 mysql bin 中的任何命令。
    【解决方案2】:

    在你使用 mysqldump 之前,请像这样指定它的路径:

    String executeCmd = "\""+mysqldump_path+"bin\\mysqldump.exe\" --host=localhost --port=3306 --user=root --password=pass database > \""+path+"\"";
     runtimeProcess = Runtime.getRuntime().exec(new String[]{"cmd.exe","/c",executeCmd});
    
           int processComplete = runtimeProcess.waitFor();
           System.out.println(processComplete);
    
           if(processComplete == 0) {
               JOptionPane.showMessageDialog(null, "Backup Created Successfully !");
               System.out.println("Backup Created Successfully !");
           }
           else{
              System.out.println("Couldn't Create the backup !");
              JOptionPane.showMessageDialog(null, "Couldn't Create the backup !");
           }
    

    如果它创建错误并异常消失,那么这是您可以添加以查看错误的代码图片:

    InputStream errorStream = runtimeProcess.getErrorStream();
    byte[] buffer = new byte[errorStream.available()];
    errorStream.read(buffer);
    String str = new String(buffer);
    System.out.println(str);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-25
      • 2021-09-12
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      相关资源
      最近更新 更多