使用Java环境从CMD行恢复MYSQL

时间:2009-05-16 14:09:36

标签: mysql restore cmd

我正在使用Java和Mysql作为程序,我正在使用脚本文件来恢复Databsae。

在Java下我正在执行一个命令:在bin下:mysql -u root -proot test< C:\ test.mysql

它没有运行而如果我在cmd行下运行它将正确执行并恢复数据库。

有谁知道..为什么会发生.. 问题是什么,如果我在Java环境下运行它,它为什么不运行。

精确语法: 我正在使用Process P = runtime.getRunTime()。exec(FilePath)

其中FilePath变量具有值:mysql -u root -proot test< c:\ test.mysql

我正在使用Windiws环境。如果我在CmdLine中运行FilePath,它将给出完美的结果。

非常感谢或帮助。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题!

实际上,我唯一可以工作的东西(在Windows上,没有测试过其他平台)是使用批处理文件:

这是代码:

public class MysqlDatabase {

private int BUFFER = 10485760;
private String host, port, user, password, db;

public MysqlDatabase(String host, String port, String user, String password, String db) {
    this.host = host;
    this.port = port;
    this.user = user;
    this.password = password;
    this.db = db;
}

public boolean restoreDatabase(String filepath) throws Exception {
    String comando = "mysql " + db + " --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " < " + filepath;
    File f = new File("restore.bat");
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(comando.getBytes());
    fos.close();
    Process run = Runtime.getRuntime().exec("cmd /C start restore.bat ");
    return true;

}

public String getFull() throws Exception {

    Process run = Runtime.getRuntime().exec(
            "mysqldump --host=" + host + " --port=" + port
            + " --user=" + user + " --password=" + password
            + " --opt "
            + "" + db);
    InputStream in = run.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    StringBuilder temp = new StringBuilder();

    int count;
    char[] cbuf = new char[BUFFER];

    while ((count = br.read(cbuf, 0, BUFFER)) != -1) {
        temp.append(cbuf, 0, count);
    }

    br.close();
    in.close();

    return temp.toString();
}}

答案 1 :(得分:0)

我认为我们需要更多信息。只要路径设置相同,如果它将从命令行运行,它应该从Runtime.exec()运行相同。你看到了什么错误?

尝试在脚本中设置表达,以便您可以将路径和命令输出回显到文件以便稍后查看。在UNIX中看起来像

 LOGFILE=my.log
 echo $PATH > $LOGFILE
 env >> $LOGFILE
 mysql -u root -proot test< c:\test.mysql >> $LOGFILE 2>&1

看起来你正在使用Windows,所以我不知道如何以这种方式设置命令文件;重要的是确保你将mysql的错误输出发送给文件。